我有一个表,我需要按两个不同的列对条目进行分组
这是我的代码
SELECT *
FROM (
SELECT max(user_msg.id) AS mid, max(user_msg.timestamp) AS tsp, user_msg.text,
usr1.id AS u1_id, usr1.nickname AS u1_nickname, usr1.avatar AS u1_avatar, usr1.avatar_art AS u1_avatar_art,
usr2.id AS u2_id, usr2.nickname AS u2_nickname, usr2.avatar AS u2_avatar, usr2.avatar_art AS u2_avatar_art,
COUNT(user_msg.id) AS cnt
FROM user_msg
join user using (client_id)
LEFT JOIN user AS usr1 ON user_msg.from_id=usr1.id
LEFT JOIN user AS usr2 ON user_msg.to_id=usr2.id
WHERE user_msg.to_id = '".$user_id."' AND to_delete='0' OR user_msg.from_id = '".$user_id."' AND to_delete='0'
group by u1_id, u2_id ORDER by tsp DESC
) c
它应该类似于 group by u1_id AND u2_id
最佳答案
您需要使用原始列名称,而不是别名。它们还没有被处理(好吧,在 SQL Server 中它们还没有被处理:不确定 MYSQL)。
...
WHERE user_msg.to_id = '".$user_id."' AND to_delete='0' OR user_msg.from_id = '".$user_id."' AND to_delete='0'
group by usr1.id, usr2.id
ORDER by tsp DESC
...
编辑:MySQL allows aliases in the GROUP BY
所以,我怀疑 GROUP BY 是错误且不明确的,需要像下面的标准 SQL 一样。有或没有别名
喜欢这个问题:SQL Query not showing expected result
[编辑结束]
请注意,要制作此标准 SQL(或在任何其他 RDBMS 上运行),您需要使用 GROUP BY 中未聚合的所有列:
SELECT
max(user_msg.id) AS mid,
max(user_msg.timestamp) AS tsp,
user_msg.text,
usr1.id AS u1_id, usr1.nickname AS u1_nickname, usr1.avatar AS u1_avatar, usr1.avatar_art AS u1_avatar_art,
usr2.id AS u2_id, usr2.nickname AS u2_nickname, usr2.avatar AS u2_avatar, usr2.avatar_art AS u2_avatar_art,
COUNT(user_msg.id) AS cnt
FROM user_msg
join user using (client_id)
LEFT JOIN user AS usr1 ON user_msg.from_id=usr1.id
LEFT JOIN user AS usr2 ON user_msg.to_id=usr2.id
WHERE user_msg.to_id = '".$user_id."' AND to_delete='0' OR user_msg.from_id = '".$user_id."' AND to_delete='0'
GROUP BY
user_msg.text, usr1.id, usr1.nickname, usr1.avatar, usr2.avatar_art,
usr2.id, usr2.nickname, usr2.avatar, usr1.avatar_art
ORDER by tsp DESC
关于mysql - SQL GROUP BY 多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6973697/