gpt4 book ai didi

mysql - 使用单个查询在 mysql 表中查找多个 child 的所有 parent

转载 作者:行者123 更新时间:2023-11-29 23:41:14 25 4
gpt4 key购买 nike

我找到了这个帖子:Finding all parents in mysql table with single query (Recursive Query) 。它描述了如何轻松找到所有独生子女的 parent 。

我想知道是否可以获取通过查询找到的多个 child 的所有 parent 。

例如。我们有一个如下表:

table1
--------------------
id | name | parent_id
1 | aaa | null
2 | bbb | 1
3 | bbb | 1
4 | ccc | 3
5 | ccd | 1

我们希望找到名称包含“cc”的项目的所有父项

select id from table1 where name like '%cc%';
# ids fetched
# => 4, 5
# parents what we're looking for
# for id = 4 -> 4,3,1 | for 5 -> 5,1

我尝试了类似的方法,但没有成功:

SELECT T2.id, T2.name, T2.parent_id, T1._id, T1.lvl
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := l.id from table1 l where name like '%cc%') tmp,
table1 t
WHERE @r <> 0) T1
JOIN categories T2
ON T1._id = T2.id;

提前致谢。

<小时/>

编辑因为我不够清楚并且我尽可能简化了示例,所以我错过了我真正需要的关键部分:

我需要找到的是相关表的任何父表的标志设置为 true。我有 3 张 table :

 categories
---------------------
id | name | parent_id | flag

articles
---------------------
id | name

# intersection between categories and related articles
category_articles
---------------------
category_id | article_id

如您所见,文章可以有多个类别。我想列出首先按任何父标记 asc 排序的文章(先为 true,后为 false),然后按名称排序。当与文章相关的类别之一或与类别相关的任何父级的标志设置为 true 时,“flag”列应等于 true。结果示例:

  articles
id | name | flag
1 | aaa | true
5 | ccc | true
2 | hhh | true
3 | bbb | false
4 | zzz | false

我需要在一个查询中执行此操作,以应用限制和偏移量而不破坏排序。

最佳答案

您可以在 MySQL 中使用 UNION 将多个 select 语句的结果合并到一个结果集中。

在这种情况下,你可以这样做:

select id from table1 where name like '%cc%'
union
select parent_id from table1 where name like '%cc%';

关于mysql - 使用单个查询在 mysql 表中查找多个 child 的所有 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26144150/

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