当在一个网上商店插入产品时,我们经常需要将一些产品(又称相关产品)链接到其他产品,并且链接必须是双向的,这意味着如果我将product1链接到product2,那么product2也必须链接到product1。
最佳实践是使用额外的表'relations‘(prodid,related_prodid),还是在products表的每个产品行中以分隔字符串的形式保留相关产品的列表?
在任何一种情况下,我们都需要一个递归方法来循环通过给定的产品数组,并使用关系插入/更新表,有人能帮我解决这个算法吗?我会做PHP编码,但我想不出一个好的方法来做。
发布于 2011-11-23 22:11:58
你最好使用一个中间表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结构的信息,如果您不知道如何操作,我将让您查看。
发布于 2011-11-23 22:10:59
一定要使用额外表(字符串解决方案确实不是一个好主意),最好将它组织起来,这样主键最低的产品就会放在关系中的第一位(允许一些优化);不需要复制关系(即同时拥有和)。至于递归方法,不清楚关系的值是从哪里得到的。
https://stackoverflow.com/questions/8243441
复制相似问题