2011-11-23 85 views
1

在eshop中插入产品时,我们经常需要将某些产品(又名相关产品)链接到其他产品,并且链接必须以两种方式完成,这意味着如果我将product1链接到product2,那么product2也必须链接到product1 。相关产品算法

哪一个是使用额外表'关系'(prodid,related_prodid)或在产品表中的每个产品的行中将相关产品列表保存在分隔字符串中的最佳做法?

在这两种情况下,我们还需要一个递归方法来遍历给定的产品数组,并用关系插入/更新表,有人可以帮我解决这个算法吗?我会做PHP编码,但我不能想到一个好办法。

+1

我认为这个问题过于宽泛,因为你发布它。 –

回答

0

你最好使用一个中间表related_to(id, product1, product2)

然后,您将使用代码:

function findRelatedProducts($product) { 
    $relatedProducts = array(); 
    $data = mysql_query("SELECT * FROM related_to WHERE product1='$product' OR product2='$product'"); 
    while ($relation = mysql_fetch_array($data)) { 
    $relatedProducts[] = $relation['product1'] == $product ? $relation['product2'] : $relation['product1']; 
    } 
    return $relatedProducts; 
} 

当然,你需要JOIN此表与您的产品表,但因为我没有太多有关你的mysql结构的信息,我会让你检查this site如果你不知道如何。

+0

使用两列而不是一个真的有帮助,我用你的例子做了我所需要的,谢谢! – bikey77

+0

非常欢迎。 – SteeveDroz

+0

考虑加入“权重”栏。由于某些产品可能比其他产品更相关。 – Paktas

0

绝对使用额外的表(字符串解决方案真的是一个坏主意),最好是组织它,以便具有最低主键的产品首先放在关系中(允许进行一些优化);没有必要重复关系(即具有和在同一时间)。 至于递归方法的事情,目前还不清楚你从哪里获得关系的价值。