0

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

我有 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 搜索引擎,我需要查找与这些项目相关联的 WORDS。

谢谢你的提示...

4

1 回答 1

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 中。

于 2012-09-26T17:14:03.753 回答