php - 按表名 desc 分组不起作用

标签 php mysql

我正在尝试开发简单的消息系统。该页面包含每个用户发送的最后一条消息。这是我的 table

-消息

id person1 person2 message  mess_date
1  2       q       hii      2016-07-11 00:00:00.000000
2  q       2       hello    2016-07-10 00:00:00.000000
3  2       q       how r u  2016-07-12 00:00:00.000000
4  2       1       message  2016-07-10 00:00:00.000000
5  q       2       nooooo   2016-07-13 00:00:00.000000

-登录

id roll
1  q
2  1
3  2

现在我尝试使用此查询来获取消息 --

suppose $roll="2";
select login.roll as userid, m1.id, m1.message, m1.mess_date 
from message as m1,login 
where (
    (m1.person1=? and login.roll=m1.person2) or 
    (m1.person2=? and login.roll=m1.person1)
) 
group by login.roll 
order by m1.mess_date desc');
$stmt->bind_param('ss', $roll, $roll);

输出有 2 个结果:

q - hiii - 2016-07-11 00:00:00.000000
1 - message - 2016-07-10 00:00:00.000000

但我希望它按mess_date排序,即

q - nooooo - 2016-07-13 00:00:00.000000
1 - message - 2016-07-10 00:00:00.000000

最佳答案

您的 SQL 组未正确使用,请尝试以下操作:

假设 id 总是随时间增长,否则你需要通过 max(mess_date) 来完成:

SELECT msg1.*
FROM (
    SELECT login.roll AS userid, m1.id, m1.message, m1.mess_date 
    FROM message AS m1,login 
    WHERE (
        (m1.person1=? AND login.roll=m1.person2) OR
        (m1.person2=? AND login.roll=m1.person1)
    )
) AS msg1, (
    SELECT msg.userid, max(msg.id) AS maxid
    FROM (
        SELECT login.roll AS userid, m1.id, m1.message, m1.mess_date 
        FROM message AS m1,login 
        WHERE (
            (m1.person1=? AND login.roll=m1.person2) OR
            (m1.person2=? AND login.roll=m1.person1)
        )
    ) AS msg
    GROUP BY userid
) AS msg2
WHERE msg1.userid = msg2.userid
AND msg1.id = msg2.maxid
ORDER BY msg1.mess_date DESC

$stmt->bind_param('ssss', $roll, $roll, $roll, $roll);

关于php - 按表名 desc 分组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38359748/

相关文章:

php - 实时统计方程

php - Zabbix 服务器正在运行 否

Mysql存储过程运行时报错

mysql - MYSQL查询中高效转换时区的最佳方式

php - mysql 按非常大的数字对行进行排序。加载时间

php - 在 phpmyadmin mysql 中创建外键

php - 将变量传递给 mysql 语句

php - 如何将 Web 应用程序制作为在服务器端 google 驱动器 PHP 中使用应用程序拥有的帐户

php - 这个代码是什么意思...?

mysql - 匹配多表获取角色名