【问题标题】:How to group by two columns in Database?如何按数据库中的两列分组?
【发布时间】:2014-07-24 00:38:59
【问题描述】:

我想列出我的数据库中的所有对话对。我有表 message 存储有关消息信息的位置。
我也尝试过此方法,但不适用于我 Link,因为仅指定了不同的选择列。
例如。当$_SESSION['userid'] = 1

表格消息

sender_id   sendto_id    created(datetime)
1           2
1           2
1           3
1           4
3           1
3           1
2           4
4           2

我的结果享有声誉,介于 1,33,1 之间。

sender_id   sendto_id
1           2
1           3
1           4
3           1

我只是想要这样,让它为每对选择最新添加的字段。 前任。 1-2(1),1-2(2)2-1 如果 2-1 是最新的,则应该是 2-1,如果是最新的,则应该是 1-2(2)

sender_id   sendto_id   created(datetime)
2           1           newest of pair 1-2 or 2-1
1           3           newest of pair 1-2 or 2-1
1           4           newest of pair 1-2 or 2-1

还有我的SQL,请帮忙!谢谢。

select m.*,
       (select MAX(created)
          from message n
         where (n.senderid = m.sendtoid AND n.sendtoid = '$userid')
            OR (n.senderid = '$userid' AND n.sendtoid = m.sendtoid)) lastsend
  from message m
 where (m.senderid = '$userid' OR m.sendtoid = '$userid')
 group by m.senderid, m.sendtoid
 order by lastsend desc

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    这是你想要的吗?

    select least(sender_id, sendto_id) as sender_id,
           greatest(sender_id, sendto_id) as sendto_id,
           min(created_datetime)
    from message m
    group by least(sender_id, sendto_id), greatest(sender_id, sendto_id);
    

    【讨论】:

    • 是的,但不能工作,怎么回事? You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as sender_id, greatest(sender_id, sendto_id)' at line 4
    • @Marcus 。 . . as 不属于group by 子句,复制粘贴错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2018-12-08
    • 2019-01-28
    • 2021-06-04
    • 1970-01-01
    • 2018-06-02
    • 2018-06-03
    相关资源
    最近更新 更多