我有三个表,categories
,tags
和taggings
。类别表以嵌套集的形式放在一起,包含相关列id
,lft
,rgt
和parent_id
。标签包含id
和name
。标记有tag_id
和taggable_id
,它指的是categories.id
。
如果可能的话,我想要一个在字段中返回的查询,比如tag_list
,一个包含类别及其所有祖先标记的字符串。因此,给出以下架构:
id | parent_id | lft | rgt
1 | NULL | 1 | 6
2 | 1 | 2 | 5
3 | 2 | 3 | 4
id | name
1 | cool
2 | rad
3 | soup
id | tag_id | taggable_id
1 | 1 | 1
2 | 2 | 2
3 | 3 | 3
我希望查询SELECT ??? FROM categories
返回:
id | tag_list
1 | cool
2 | rad cool
3 | rad cool soup
背景信息:我正在运行Rails,我正在使用Thinking Sphinx进行搜索,使用awesome_nested_set进行嵌套。我有一个名为categories
的表格,其tags
关系中有许多has_many_through
。
答案 0 :(得分:2)
SELECT node_id, group_concat(name SEPARATOR ' ')
FROM taggings INNER JOIN tags ON taggings.tag_id=tags.id
INNER JOIN (SELECT node.id AS node_id, parent.id AS parent_id
FROM categories AS node,
categories AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt) subcategories
ON subcategories.parent_id=taggings.taggable_id
GROUP BY (node_id);
好吧,我为一个人学到了一两件事:)
编辑:我没有针对mysql检查它,只检查SQLite,所以语法可能不是100%。