如何使用MySQL子查询和GROUP BY

肯尼迪·邦德

先感谢您。我有一张像这样的桌子...

Sender_id receiver_id message time_sent
1          2          Hello    07:19:00
2          1          Hi.      07:20:00
2          3          Sup      07:21:00
4          5          wyd      07:18:00

我试图获取所有消息,其中2是发送者或接收者,然后删​​除重复的ID,所以最后我只得到每个用户的最后一条消息。像聊天应用程序首页上的消息列表一样思考。

从我的研究中,我知道我需要子查询和DISTINCT或GROUP BY的某种组合,但是我不能把心思放在MySQL复杂查询上。基本查询我很容易。

这就是我到目前为止

$messages_results = $wpdb->get_results( "
    SELECT * 
    FROM {$wpdb->prefix}messages 
    WHERE sender_id = ".get_current_user_id()." OR receiver_id = ".get_current_user_id()."  
    GROUP BY receiver_id, sender_id");

如果可能,请向我显示示例和解释。我真的很想了解MySQL复杂的查询。我已经准备好并且正在练习,但是我只是不明白。再次感谢。

编辑:我期待

Sender_id receiver_id message time_sent
2          1          Hi.      07:20:00
2          3          Sup      07:21:00
专线小巴

如果您使用的是MySQL 8.0,则可以row_number()在子查询中使用sender/receiver降序对具有相同的消息组中的记录进行排名time_sent然后,外部查询仅过滤每个组的最新记录:

select sender_id, receiver_id, message, time_sent
from (
    select
        t.*,
        row_number() over(
            partition by least(sender_id, receiver_id), greatest(sender_id, receiver_id) 
            order by time_sent desc
        ) rn
    from mytable t
    where sender_id = ? or receiver_id = ?
) x
where rn = 1

在早期版本中,这也可以通过返回time_sent每个sender/receiver元组的最大值的相关子查询来实现

select t.*
from mytable t
where 
    (sender_id = ? or receiver_id = ?)
    and time_sent = (
    select max(time_sent)
    from mytable t1
    where 
        least(t1.sender_id, t1.receiver_id) = least(t.sender_id, t.receiver_id)
        and greatest(t1.sender_id, t1.receiver_id) = greatest(t.sender_id, t.receiver_id)
)

DB Fiddle的演示中,当2作为参数给出时,两个查询都返回:

| Sender_id | receiver_id | message | time_sent |
| --------- | ----------- | ------- | --------- |
| 2         | 1           | Hi.     | 07:20:00  |
| 2         | 3           | Sup     | 07:21:00  |

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

您如何在子查询中使用group by / having子句?

来自分类Dev

使用内部联接和子查询的mysql查询

来自分类Dev

MySQL嵌套查询和GROUP BY

来自分类Dev

使用GROUP BY的MySQL查询和使用ORDER BY的子查询

来自分类Dev

结合使用MYSQL GROUP_CONCAT和子查询

来自分类Dev

如何使用mysql子查询减去库存和销售量?

来自分类Dev

保留子查询的顺序(使用GROUP BY和ORDER BY)

来自分类Dev

SUM和GROUP BY使用子查询

来自分类Dev

如何在mysql中通过group by使用子查询?

来自分类Dev

带有子查询和GROUP BY的MySQL SELECT的性能

来自分类Dev

如何使mysql子查询

来自分类Dev

使用GROUP BY的子查询中的MySQL COUNT

来自分类Dev

MySQL查询-如何获取具有GROUP BY和WHERE条件的SUM并使用LEFT OUTER JOIN?

来自分类Dev

如何使用主查询中的LEFT JOIN和子查询中的INNER JOIN优化MySQL SELECT查询?

来自分类Dev

结合使用MYSQL GROUP_CONCAT和子查询

来自分类Dev

如何获取MySQL子查询GROUP BY结果的行号?

来自分类Dev

MySQL如何使用子查询创建视图?

来自分类Dev

MySQL中使用GROUP BY的子查询非常慢

来自分类Dev

当我在查询中使用“ GROUP_CONCAT”和“ HAVING”时,如何计算MySQL结果?

来自分类Dev

SUM和GROUP BY使用子查询

来自分类Dev

MySQL查询GROUP BY和ORDER by

来自分类Dev

MySQL如何使用GROUP BY和BETWEEN?

来自分类Dev

如何在子查询中使用多个 sum 和 group by?

来自分类Dev

在子查询Mysql中使用group concat的结果

来自分类Dev

如何在 mysql 的 Group_concat 子查询中使用选择查询

来自分类Dev

如何在mysql中使用join和union进行子查询

来自分类Dev

MySQL:如何使用子查询和连接选择 min()

来自分类Dev

如何同时使用MYSQL Group By和Order By

来自分类Dev

如何使用“Case When”和“Group By”创建 Mysql 查询

Related 相关文章

  1. 1

    您如何在子查询中使用group by / having子句?

  2. 2

    使用内部联接和子查询的mysql查询

  3. 3

    MySQL嵌套查询和GROUP BY

  4. 4

    使用GROUP BY的MySQL查询和使用ORDER BY的子查询

  5. 5

    结合使用MYSQL GROUP_CONCAT和子查询

  6. 6

    如何使用mysql子查询减去库存和销售量?

  7. 7

    保留子查询的顺序(使用GROUP BY和ORDER BY)

  8. 8

    SUM和GROUP BY使用子查询

  9. 9

    如何在mysql中通过group by使用子查询?

  10. 10

    带有子查询和GROUP BY的MySQL SELECT的性能

  11. 11

    如何使mysql子查询

  12. 12

    使用GROUP BY的子查询中的MySQL COUNT

  13. 13

    MySQL查询-如何获取具有GROUP BY和WHERE条件的SUM并使用LEFT OUTER JOIN?

  14. 14

    如何使用主查询中的LEFT JOIN和子查询中的INNER JOIN优化MySQL SELECT查询?

  15. 15

    结合使用MYSQL GROUP_CONCAT和子查询

  16. 16

    如何获取MySQL子查询GROUP BY结果的行号?

  17. 17

    MySQL如何使用子查询创建视图?

  18. 18

    MySQL中使用GROUP BY的子查询非常慢

  19. 19

    当我在查询中使用“ GROUP_CONCAT”和“ HAVING”时,如何计算MySQL结果?

  20. 20

    SUM和GROUP BY使用子查询

  21. 21

    MySQL查询GROUP BY和ORDER by

  22. 22

    MySQL如何使用GROUP BY和BETWEEN?

  23. 23

    如何在子查询中使用多个 sum 和 group by?

  24. 24

    在子查询Mysql中使用group concat的结果

  25. 25

    如何在 mysql 的 Group_concat 子查询中使用选择查询

  26. 26

    如何在mysql中使用join和union进行子查询

  27. 27

    MySQL:如何使用子查询和连接选择 min()

  28. 28

    如何同时使用MYSQL Group By和Order By

  29. 29

    如何使用“Case When”和“Group By”创建 Mysql 查询

热门标签

归档