2012-09-25 70 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; 完美答案,非常感谢! –