MySql选择多对(多对多)

时间:2012-09-25 19:28:55

标签: mysql select many-to-many sphinx

如何加入两个级联的多对多关系?

我有5张桌子:

ITEMS            : id /     name

ITEMS_TAXONOMIES : id /    item_id    / taxonomy_id

TAXONOMIES       : id /  attribute_id / adjective_id

ATTRIBUTES       : id /     name

ADJECTIVES       : id /     name

我需要一个SELECT来检索特定项目的所有相关属性 - 形容词对。

我正在使用Sphinx搜索引擎,我需要查找与这些项目相关的词语。

感谢您的提示...

1 个答案:

答案 0 :(得分: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中 结果中文档的相关分类法。