我想从messages
表中选择包含receiver_id = 1
或sender_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
答案 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;