相关产品算法

时间:2011-11-23 14:00:20

标签: php mysql

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

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

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

2 个答案:

答案 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 ,如果你不知道如何。