如何在 sql 和 php 中的 'SELECT DISTINCT CASE WHEN' 语句中使用 'ORDER BY' 语句?

How to use 'ORDER BY' statement in a 'SELECT DISTINCT CASE WHEN' statement in sql & php?

我正在尝试创建一个聊天应用程序,目前正在列出当前用户进行的对话。
这是我的SQLTable:(这里29是当前用户)

ID   |  FROM_USER  |  TO_USER  |  MESSAGE      
------------------------------------------------------------
1    |  16         |  29       |  Hey!         
2    |  29         |  18       | Hii..         
3    |  29         |  16       | What's up?
4    |  18         |  29       | Long time no see..

我想做的是按降序对对话进行分组,例如:

18: Long time no see...
29 (to 16) : What's up?

我目前使用的php代码如下:


$query = mysqli_query($con,"SELECT DISTINCT CASE WHEN from_user = 29 THEN to_user ELSE from_user END as other_user FROM mytable WHERE from_user = 29 OR to_user = 29 ORDER BY id DESC");
while($fetch = mysqli_fetch_array($query)) {
$user = $fetch['other_user'];
echo $user.'<br/>';
}

但这似乎不起作用。我究竟做错了什么?
提前致谢!

这是您的代码:

SELECT DISTINCT CASE WHEN from_user = 29 THEN to_user ELSE from_user END as other_user
FROM mytable
WHERE from_user = 29 OR to_user = 29
ORDER BY id DESC;

id 未定义,因为它不在 distinct 中。我猜你不希望它出现在那里,因为 SELECT DISTINCT 会 return 重复 other_users.

我建议聚合而不是 DISTINCT。 MySQL 使这变得容易,因为您可以在 GROUP BY:

中使用列别名
SELECT (CASE WHEN from_user = 29 THEN to_user ELSE from_user END) as other_user
FROM mytable
WHERE 29 IN (from_user, to_user)
GROUP BY other_user
ORDER BY MAX(id) DESC;

这将 return 其他用户按新近度排序(或至少基于 id 列的新近度)。