2012-09-25 71 views
0

如何加入兩個級聯多對多關係?MySql SELECT many to(many to many)

我有5個表:

ITEMS   : id/ name 

ITEMS_TAXONOMIES : id/ item_id /taxonomy_id 

TAXONOMIES  : id/attribute_id/adjective_id 

ATTRIBUTES  : id/ name 

ADJECTIVES  : id/ name 

我需要一個SELECT檢索所有相關的屬性,形容詞對特定項目。

我正在與獅身人面像的搜索引擎,我需要尋找與項目相關的單詞。

謝謝你的提示...

+0

你是否在做這個來創建獅身人面像索引?你是說每個分類學有多個屬性和多個形容詞嗎?如果是這樣,在一個查詢中獲得全部內容的唯一方法是按字段進行分組(這將隱藏您的記錄),或與重複項一起進行。更好的選擇可能是在輔助查詢中獲取屬性和形容詞。 (你甚至可以讓獅身人面像爲你做這件事) – Cfreak

+0

@Cfreak - 是的,這是爲獅身人面像索引。不,每個分類只有1個形容詞和1個屬性。但項目可以有多個分類法和分類法屬於許多項目。我不確定要理解「將會隱藏你的記錄的字段組」......你能解釋一下嗎? –

+0

你的意思是「我需要尋找與物品相關的詞語」。你的意思是找到一個文件/項目(通過搜索它的名字),然後獲取該項目的「分類法」列表。或者你的意思是你想在'屬性/形容詞'名字裏搜索並返回匹配的文檔? – barryhunter

回答

1

(複製我的回答對獅身人面像論壇已經取得的)

我認爲最簡單的解決辦法是

sql_query = SELECT i.id, i.name , \ 
        GROUP_CONCAT(CONCAT(at.name,' ',ad.name)) as taxonomies \ 
        FROM items i \ 
          LEFT JOIN items_taxonomies it ON (i.id = it.item_id) \ 
          LEFT JOIN taxonomies t ON (t.id = it.taxonomy_id) \ 
          LEFT JOIN attributes at ON (at.id = t.attribute_id) \ 
          LEFT JOIN adjectives ad ON (ad.id = t.adjective_id) \ 
        GROUP BY i.id \ 
        ORDER BY NULL 

只是搜索你不需要使用sql_attr_multi。通過sql_joined_field執行索引可能會使性能提升輕微 ,但上面的操作比較簡單,所以 先嚐試一下。或者你可以把屬性和形容詞放在單獨的字段中。但 以上有好處可以搜索「屬性欄」來獲得具體的分類。

如果您想要爲結果中的文檔分組或取回相關分類的列表,您可以將taxonomy_id粘貼到MVA中。

+1

thank_you =回答AS simple as this; 完美答案,非常感謝! –