Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:从另一个表中选择具有最后一条记录的对话分组依据_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql SQL:从另一个表中选择具有最后一条记录的对话分组依据

Mysql SQL:从另一个表中选择具有最后一条记录的对话分组依据,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有以下问题。我有两张桌子: baz_对话 con_id, con_users, con_date baz_con_消息 message_id, message_con_id, message_text, message_author 我想显示我的所有对话——表baz_对话中的con_用户必须包含myID以及来自该对话另一个表的最后一条消息。我花了太多时间编写这个、、easy、、sql select,但它选择了表baz_con_messages中的第一条消息,而不是最后一条消息。谢谢你的回答

我有以下问题。我有两张桌子:

baz_对话

con_id, con_users, con_date
baz_con_消息

message_id, message_con_id, message_text, message_author
我想显示我的所有对话——表baz_对话中的con_用户必须包含myID以及来自该对话另一个表的最后一条消息。我花了太多时间编写这个、、easy、、sql select,但它选择了表baz_con_messages中的第一条消息,而不是最后一条消息。谢谢你的回答。这是我的密码:

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

我想你想要这样的东西:

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
                 );

尝试使用自连接,当您使用
GROUP BY
BY一些常用值时,您的结果是分组的,但不是按顺序排列的,因此您不能期望使用GROUP BY,它将为您提供组的最新结果,因此对于您的情况,您需要对话组的最后一个消息id。我在baz_对话中使用另一个连接作为自连接,但这次我使用了用于获取消息id和会话id的最大值的子查询,并在两个条件下进行联接,即
使用(消息id,消息id)
因此,第一条
baz_con_消息
与新的maxima resultset连接,其中会话id是公共的,并且两个结果集都与消息id匹配,因此根据
MAX(message_id)
每个会话组只返回一个结果

SELECT 
  m.*,
  c.* 
FROM
  baz_conversations AS c 
   JOIN baz_con_messages AS m 
   ON c.con_id = m.message_con_id 
   JOIN 
  (SELECT MAX(message_id) message_id , message_con_id
    FROM baz_con_messages GROUP BY message_con_id
   ) m2
   USING(message_id , message_con_id )
WHERE c.con_users LIKE '%1,%' 
ORDER BY m.message_id DESC 

您使用的是什么数据库SQL Server或MySQL?你应该只使用你真正使用的数据库来标记你的问题。从
limit
,我猜是MySQL。谢谢。你是对的。它是有效的,但是你能告诉我更多关于你的答案吗。我不理解您的sql查询:/please,如果您能描述查询的各个部分,我将非常高兴。再次非常感谢。@user3354689查看我的更新答案,希望有意义