使用子查询选择最后10个不同的行

时间:2017-04-22 21:56:13

标签: php mysql sql subquery

我想从messages表中选择包含receiver_id = 1sender_id = 1的最后10行,但receiver_id = 1的{​​{1}}行DISTICT已应用于sender_id以及sender_id = 1上已应用DISTINCT属性的receiver_id

基本上,我想说的是,我想要选择最后10条消息,这些消息要么由id为1的用户发送,要么由10个不同的其他用户发送或发送。

到目前为止我尝试了什么:

SELECT * FROM (SELECT DISTINCT sender_id FROM messages WHERE receiver_id = 1) ORDER BY id DESC LIMIT 10) tmp ORDER BY id ASC

SELECT * FROM (SELECT * DISTINCT receiver_id FROM messages WHERE sender_id= 1) ORDER BY id DESC LIMIT 10) tmp ORDER BY id ASC

但是试图单独添加并添加数组(并通过消息的ID对它们进行排序)并不是很有效。

所以我尝试了这样的查询:

SELECT * FROM (SELECT DISTINCT receiver_id, sender_id FROM messages WHERE (receiver_id = 1 OR sender_id = 1)) ORDER BY id DESC LIMIT 10) tmp ORDER BY id ASC

但事实证明我的查询完全是一团糟,并且没有回复我想要的东西。

P.S。:我正在使用XAMPP MySQL:MariaDB

1 个答案:

答案 0 :(得分:0)

你的第二段是:

  

基本上,我想说的是我想选择10   存储在数据库中的最后一条消息(行)已发送   或者由id为1的用户收到。

这是一个相当基本的查询:

SELECT m.*
FROM messages m
WHERE 1 IN (m.receiver_id, m.sender_id)
ORDER BY m.id DESC
LIMIT 10;