gpt4 book ai didi

sql - MySQL 查询合并连接表和嵌套集

转载 作者:行者123 更新时间:2023-11-29 07:12:55 24 4
gpt4 key购买 nike

我有三个表,categoriestagstaggings。类别表以嵌套集的方式放在一起,相关列 idlftrgtparent_id。标签有 idname。 Taggings 有 tag_idtaggable_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 ???从类别返回:

id |      tag_list
1 | cool
2 | rad cool
3 | rad cool soup

背景信息:我正在运行 Rails,我使用 Thinking Sphinx 进行搜索,使用 awesome_nested_set 进行嵌套。我有一个名为 categories 的表,它在 has_many_through 关系中有许多 tags

最佳答案

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

关于sql - MySQL 查询合并连接表和嵌套集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3391746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com