gpt4 book ai didi

mysql - GROUP BY 和 ORDER BY 不能一起工作

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

我有一个选择,可以根据日期显示用户事件。但现在结果显示得很好,但没有今天的事件,我也需要它们。我按用户 ID 对其进行分组:

SELECT 
a.id,
a.title,
a.name,
a.surname,
a.zip,
a.city,
a.address,
a.spec,
a.active,
b.start,
b.user,
b.status
FROM user a
INNER JOIN appointement b
ON a.id=b.user WHERE a.spec='$spec'
AND b.status='open'
AND a.active='1'
AND b.start>='$date'
GROUP BY a.id
ORDER BY b.start ASC

数据库中的日期格式如下:2014-07-31 08:15:00 就像$date问题可能出在那个日期吗?

最佳答案

使用 GROUP BY 子句时,所有行都会根据 GROUP BY 子句中共享相同字段值的行放在一起。其他字段被设计为来自聚合函数,尽管 MySQL 默认情况下不强制执行此操作。

通过您的查询,您试图获取每个用户的所有约会。但是,当您按用户 ID 进行分组时,它会将约会范围缩小到该用户的一个约会。它选择的约会尚未定义,并且可能会发生变化。

如果您希望每个用户一行包含该用户的所有约会详细信息,您可以使用 GROUP_CONCAT 将它们全部放入一个字段中。

SELECT 
a.id,
a.title,
a.name,
a.surname,
a.zip,
a.city,
a.address,
a.spec,
a.active,
GROUP_CONCAT(CONCAT_WS('-', b.start, b.user, b.status))
FROM user a
INNER JOIN appointement b
ON a.id=b.user WHERE a.spec='$spec'
AND b.status='open'
AND a.active='1'
AND b.start>='$date'
GROUP BY a.id
ORDER BY b.start ASC

如果您只想每次使用第一个相关约会,则使用子查询来识别该约会,并将其加入约会以获取详细信息

SELECT 
a.id,
a.title,
a.name,
a.surname,
a.zip,
a.city,
a.address,
a.spec,
a.active,
b.start,
b.user,
b.status
FROM user a
INNER JOIN
(
SELECT user, MIN(start) AS first_app
FROM appointment
WHERE status='open'
AND start>='$date'
GROUP BY user
) sub0
ON a.id = sub0.user
INNER JOIN appointement b
ON a.id=b.user
AND sub0.first_app = b.start
WHERE a.spec='$spec'
AND b.status='open'
AND a.active='1'
AND b.start>='$date'
ORDER BY b.start ASC

关于mysql - GROUP BY 和 ORDER BY 不能一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24805272/

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