在eshop中插入产品时,我们经常需要将某些产品(也称为相关产品)链接到其他产品,并且链接必须以两种方式进行,这意味着如果我将product1链接到product2,那么product2也必须链接到product1。
哪种方法最佳,使用额外的表'relations'(prodid,related_prodid)或将相关产品列表保存在products表的每个产品行的分隔字符串中?
在任何一种情况下,我们还需要一个递归方法来遍历给定的产品数组并使用关系插入/更新表,有人可以帮我解决算法吗?我会做PHP编码,但我不能想到一个很好的方法。
答案 0 :(得分:0)
绝对使用额外的表(字符串解决方案确实是一个坏主意),最好组织它,以便将具有最低主键的产品放在关系中的第一位(允许进行一些优化);没有必要复制关系(即有和同时)。 至于递归方法的事情,目前尚不清楚从何处获得关系的价值。
答案 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 ,如果你不知道如何。