gpt4 book ai didi

php - MySQL嵌套查询如何选择多行

转载 作者:行者123 更新时间:2023-12-01 00:27:38 26 4
gpt4 key购买 nike

SELECT id, FIO, parent_id
FROM users
WHERE parent_id =
(
SELECT id
FROM users
WHERE parent_id =
(
SELECT id
FROM users
WHERE id = 16
)
)

所以在这里我制作了一个层次结构树,首先选择根父级,然后是子级,依此类推直到第 24 层深度。

问题是:如何从内部查询中选择多列?

因为我需要让其他行字段显示如下信息:name, surname, age

看起来我只能在外部查询(最顶层)中获取那些行列。

P.S.:我不想使用联接,因为它们会生成重复的字段。

有解决办法吗?

最佳答案

您可以使用 MySQL 查询变量在 SQL 端进行迭代。这将返回具有一个父节点的所有数据的所有子节点,而不会重复自己(因此不会对树的深度施加限制)

像这样:(500 是 parent 的 id 开头)

SELECT
id,
parent_id,
name,
'0' as depth,
@tree_ids := id AS foo
FROM
tree,
(SELECT @tree_ids := '', @depth := -1) vars
WHERE id = 500
UNION
SELECT
id,
parent_id,
name,
@depth := IF(parent_id = 500, 1, @depth + 1) AS depth,
@tree_ids := CONCAT(id, ',', @tree_ids) AS foo
FROM
tree
WHERE FIND_IN_SET(parent_id, @tree_ids) OR parent_id = 500

参见 a working example at SQLfiddle

请注意,这会在较大的数据集上产生非常糟糕的性能,因为 MySQL 不会使用您的索引,而是会进行全表扫描。 (我不明白为什么它不使用索引,就是这样。如果有人对索引问题有建议或解释,请发表评论!)

关于php - MySQL嵌套查询如何选择多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11402518/

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