SQL
$sql = "SELECT DISTINCT from_user, messages.* FROM messages WHERE to_user = :user OR from_user = :usr Group BY from_user
ORDER BY time DESC";
它可以工作,但是会显示用户消息from latter
,然后按我的方式进行订购
$sql = "SELECT DISTINCT from_user, messages.* FROM messages WHERE to_user = :user OR from_user = :usr Group BY from_user HAVING time ASC
ORDER BY time DESC";
?
HAVING time ASC ORDER BY time DESC"; ?
我想你们现在就得到了我,如何解决?
我的表结构
我需要select
来time ASC
来自每个用户的最后一条消息,然后是order
来time DESC
来自每个用户的最后一条消息
我尝试过
$sql = "SELECT DISTINCT from_user, messages.* FROM messages WHERE to_user = :user OR from_user = :usr ORDER BY time ASC Group BY from_user
ORDER BY time DESC";
但不起作用
答案 0 :(得分:0)
您的问题在having
子句中。它与合计功能一起使用,可以对记录进行分组并检查记录上的某些条件。有关更多信息,您可以找到此link。
要订购,只能通过order by
子句完成。
此外,在查询中,您仅将group by
用于1个字段,但是message.*
将选择所有字段,这再次显示错误。
请参见上面的链接并重新构建查询。
select m.*
from messages m
where m.time = (select max(m2.time) from messages m2 where m2.to_user = m.to_user and m2.from_user=m.from_user)
and m.to_user = :user OR m.from_user = :usr
order by time desc;
注意:您可以根据需要应用过滤器。这可能会有助于您的查询。
答案 1 :(得分:0)
您可以通过正确编写查询来解决此问题。正确的版本如下所示:
simmer()
或者,因为您似乎想要一行:
SELECT m.*
FROM messages m
WHERE :usr IN (m.to_user, m.from_user) AND
m.time = (SELECT MAX(m2.time)
FROM messages m2
WHERE :usr IN (m2.to_user, m2.from_user)
);