gpt4 book ai didi

php - 如何在不使用 INNER JOIN 的情况下连接表?

转载 作者:太空宇宙 更新时间:2023-11-03 11:16:22 25 4
gpt4 key购买 nike

我不擅长编写 MySQL 查询,所以这个查询不能正常工作。我想选择所有“组”,并通过保存在组中的 ID 获取有关组的外部信息,例如组的创建者、最后更新它的人以及组中的图像数量。

在此查询中,我使用的是 INNER JOIN,但显然在此查询中未选择没有图像的组。我希望查询无论如何都选择所有组,并使用 ID 获取所有组的信息。如果一个组没有图像,我希望图像计数为 0,而不是要忽略的组。

这是当前查询:

SELECT g.id, g.name, g.date_created, g.date_updated, g.created_by, 
c.fullname AS creator_name, g.updated_by, u.fullname AS updater_name, COUNT(i.id) as image_count

FROM gallery_groups g INNER JOIN
users c INNER JOIN
users u INNER JOIN
gallery_images i

WHERE g.created_by=c.id AND g.updated_by=u.id AND i.group=g.id $id
GROUP BY g.name
ORDER BY g.date_updated DESC, g.name

我曾尝试用 LEFT JOIN、RIGHT JOIN 和 OUTER JOIN 替换 INNER JOIN,但都只会导致 sql 错误。

感谢所有帮助!

最佳答案

将连接条件与连接放在它们所属的位置。不要混合聚合(列上的求和/最大值等)和非聚合(不在 GROUP BY 中且不在函数中的字段)即使 MySQL 允许您

SELECT g.id, g.name, g.date_created, g.date_updated, g.created_by, 
c.fullname AS creator_name, g.updated_by, u.fullname AS updater_name, COUNT(i.id) as image_count
FROM gallery_groups g LEFT JOIN
users c ON g.created_by=c.id LEFT JOIN
users u ON g.updated_by=u.id LEFT JOIN
gallery_images i ON i.group=g.id
WHERE g.id = $id
GROUP BY g.id, g.name, g.date_created, g.date_updated, g.created_by,
c.fullname, g.updated_by, u.fullname
ORDER BY g.date_updated DESC, g.name

由于除了图像计数之外几乎所有其他内容都进行了分组,因此最好只对其进行子查询

SELECT g.id, g.name, g.date_created, g.date_updated, g.created_by, 
c.fullname AS creator_name, g.updated_by, u.fullname AS updater_name,
IFNULL((
select COUNT(1)
from gallery_images i
WHERE i.group=g.id), 0) as image_count
FROM gallery_groups g LEFT JOIN
users c ON g.created_by=c.id LEFT JOIN
users u ON g.updated_by=u.id LEFT JOIN
gallery_images i ON i.group=g.id
WHERE g.id = $id
ORDER BY g.date_updated DESC, g.name

关于php - 如何在不使用 INNER JOIN 的情况下连接表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4743892/

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