2013-10-13 97 views
0

長時間偵聽器,第一次調用者。 我一直在研究這個問題幾個小時了,一直無法找到我的具體問題的答案。在mysql中獲取所選項目的相關項目

我有相關的產品數據庫的三個表:

  • tbl_item(與item_iditem_name,等...) - 基本項目表
  • tbl_item_term(與term_idterm_name) - 描述性術語
  • tbl_item_term_map(與item_idterm_id) - 分配的術語項

每個項目都有多個與它們相關的術語。我想要做的是根據他們的條款顯示與正在查看的項目相關的所有項目。

例如:

item1 has term1, term2, term3 assigned to it<br> 
item2 has term2, term4, term6 assigned to it<br> 
item3 has term4, term5, term6 assigned to it 

在每件商品頁面,我想展示相關產品。在這種情況下,item3將顯示item2作爲相關產品,因爲它共享term4。

我發現了一些有用的回答左加入三表問題,但沒有什麼符合這種特殊情況。提前致謝!

克里斯

編輯

這裏是Sajuna提供的代碼剪斷,修改,以反映我的表/字段名:

SELECT ti.item_name FROM tbl_item ti 
INNER JOIN tbl_item_term_map ttm on ttm.item_id = ti.item_id 
INNER JOIN tbl_item_term tt on tt.term_id = ttm.term_id 
WHERE tt.term_id IN (

    SELECT tt.term_name FROM tbl_item ti 
    INNER JOIN tbl_item_term_map ttm on ttm.item_id = ti.item_id 
    INNER JOIN tbl_item_term tt on tt.term_id = ttm.term_id 
    WHERE ti.item_id = 2536; 

); 

當我跑得嵌套查詢,它按預期方式返回分配給該ID的五個字段。但是當我運行整個事情時,我得到一個錯誤(#1064 - 你的SQL語法有錯誤;檢查對應於你的MySQL服務器版本的手冊,在第9行附近使用正確的語法)。這是什麼意思是「不適合生產」?

+0

如果您發佈了您的表結構,它會更容易幫助 –

回答

0

如果不是生產,你可以使用它。

SELECT tbl_item.id FROM tbl_item ti 
INNER JOIN tbl_item_term_map ttm on ttm.tbl_item_id = ti.id 
INNER JOIN tbl_item_term tt on tt.id = ttm.tbl_item_term_id 
WHERE tt.terms IN (

    SELECT tt.terms FROM tbl_item ti 
    INNER JOIN tbl_item_term_map ttm on ttm.tbl_item_id = ti.id 
    INNER JOIN tbl_item_term tt on tt.id = ttm.tbl_item_term_id 
    WHERE ti.id = 111; 

); 
+0

感謝您的代碼位,但是您的意思是「不適合生產」?一旦準備就緒,我打算將它放在網站上,所以我確實需要一些我可以使用的代碼。 –

+0

沒有我的意思是,如果是我我會做第一次獲取以獲取項目的相關條款,然後將其存儲在一個數組中,然後執行第二次獲取以基於該數組獲取相關項目。確保您的表格也正確編制索引。 –