我有以下问题。我有两张桌子:
baz_conversations
con_id, con_users, con_date
baz_con_messages
message_id, message_con_id, message_text, message_author
我想展示我的所有对话 - 表baz_conversations中的con_users必须包含来自该对话的另一个表的最后消息的myID。我花了太多时间编程这个,简单,sql选择,但它从表baz_con_messages中选择FIRST和NOT LAST消息。谢谢您的回答。这是我的代码:
SELECT m.*, c.* FROM baz_conversations AS c RIGHT JOIN
baz_con_messages AS m ON c.con_id = m.message_con_id
WHERE c.con_users LIKE '%1,%'
GROUP BY c.con_id
ORDER BY m.message_id DESC
LIMIT 1
答案 0 :(得分:0)
我想你想要这样的东西:
SELECT m.*, c.*
FROM baz_conversations c JOIN
baz_con_messages m
ON c.con_id = m.message_con_id
WHERE c.con_users LIKE '%1,%' AND
not exists (select 1
from baz_con_messages m2
where m2.message_con_id = m.message_con_id and
m2.message_id > m.message_id
);
答案 1 :(得分:0)
尝试使用自联接,当您使用GROUP BY
某些常见值时,您的结果会按顺序排列,但不能按顺序排列,因此您不能指望使用group by它会为您提供组的最新结果所以对于你的情况,你需要来自会话组的最后一个消息ID我在baz_conversations上使用另一个连接作为自联接,但这次我使用子查询来获取消息ID的最大值以及会话ID并加入两个条件,即{ {1}}所以第一个USING(message_id , message_con_id )
与新的最大值结果集结合,其中会话ID是常见的,结果集也与消息ID匹配,因此根据每个会话组的baz_con_messages
只返回一个结果< / p>
MAX(message_id)