gpt4 book ai didi

php - LEFT JOIN SQL 语句对性能的影响

转载 作者:行者123 更新时间:2023-11-29 00:32:24 25 4
gpt4 key购买 nike

正如我们所知,LEFT JOIN SQL 语句给出了 LEFT 表中的所有值和通过右表中的 id(外键)提供的联合值。例如我有下表

comments
comment_id
parent_id
comment_body

这个表有如下数据

-----------|-----------|-------------------|
comment_id | parent_id | comment_body |
-----------|-----------|-------------------|
1 | NULL | parent comment |
-----------|-----------|-------------------|
2 | 1 | child comment |
-----------|-----------|-------------------|
3 | NULL | parent comment |
-----------|-----------|-------------------|
4 | 1 | child comment |
-----------|-----------|-------------------|
5 | 3 | child comment |
-----------|-----------|-------------------|
6 | 1 | parent comment |
-----------|-----------|-------------------|
7 | NULL | parent comment |
-----------|-----------|-------------------|
8 | 1 | child comment |
-----------|-----------|-------------------|
9 | 7 | child comment |
-----------|-----------|-------------------|
10 | 3 | child comment |
-----------|-----------|-------------------|

例如,我在上表中运行以下查询

SELECT c1 . * , c2 . * 
FROM comments c1
LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c1.parent_id IS NULL

它会给出如下输出

-----------|-----------|---------------|------------|-----------|---------------|
comment_id | parent_id | comment_body | comment_id | parent_id | comment_body |
-----------|-----------|---------------|------------|-----------|---------------|
1 | NULL |parent comment | 1 | 1 | child comment |
-----------|-----------|---------------|------------|-----------|---------------|
1 | NULL |parent comment | 4 | 1 | child comment |
-----------|-----------|---------------|------------|-----------|---------------|
1 | NULL |parent comment | 6 | 1 | child comment |
-----------|-----------|---------------|------------|-----------|---------------|
1 | NULL |parent comment | 8 | 1 | child comment |
-----------|-----------|---------------|------------|-----------|---------------|
3 | NULL |parent comment | 5 | 3 | child comment |
-----------|-----------|---------------|------------|-----------|---------------|
3 | NULL |parent comment | 10 | 3 | child comment |
-----------|-----------|---------------|------------|-----------|---------------|
7 | NULL |parent comment | 9 | 7 | child comment |
-----------|-----------|---------------|------------|-----------|---------------|

我在这里强调了值(value),这是额外的,我不需要它们。

enter image description here

在我看来,这些额外的值可能会提高性能。我可以得到以下格式的输出吗

enter image description here

如果不可能,请指导我上述查询的优缺点是什么?我应该使用还是不使用?

最佳答案

你不能这样做。但这里有一个替代方案

SELECT 
c1 . * ,
GROUP_CONCAT(c2.comment_id) AS comment_ids,
GROUP_CONCAT(c2.parent_id) AS parent_ids,
GROUP_CONCAT(c2.comment_body) AS comment_bodies
FROM comments c1
LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c1.parent_id IS NULL

这将为您提供这种形式的输出

-----------|-----------|---------------|------------|-----------|-----------------------------------------------------------|
comment_id | parent_id | comment_body | comment_id | parent_id | comment_body |
-----------|-----------|---------------|------------|-----------|-----------------------------------------------------------|
1 | NULL |parent comment | 1,4,6,8 | 1,1,1,1 | child comment , child comment ,child comment,child comment|
-----------|-----------|---------------|------------|-----------|-----------------------------------------------------------|
3 | NULL |parent comment | 5,10 | 3,3 | child comment ,child comment |
-----------|-----------|---------------|------------|-----------|-----------------------------------------------------------|
7 | NULL |parent comment | 9 | 7 | child comment |
-----------|-----------|---------------|------------|-----------|-----------------------------------------------------------|

您可以使用 php explode 函数分解 column 以将逗号分隔值转换为数组。

MySQL GROUP_CONCAT

关于php - LEFT JOIN SQL 语句对性能的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15921245/

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