2011-11-23 108 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

絕對使用額外的表(字符串解決方案真的是一個壞主意),最好是組織它,以便具有最低主鍵的產品首先放在關係中(允許進行一些優化);沒有必要重複關係(即具有和在同一時間)。 至於遞歸方法的事情,目前還不清楚你從哪裏獲得關係的價值。