如何从消息表中选择最后一个文本

时间:2017-05-09 05:00:27

标签: mysql

我有两个表(消息和用户)。我想从消息表中为特定的ad_id选择最后一个(msg_id,text),并且需要从用户表中选择用户的名称。

SELECT u.id
     , m.date
     , m.ad_id
     , max(m.msg_id)as msg_id
     , u.first_name
     , m.text
     , m.u_to_id
     , m.u_from_id 
FROM user u 
JOIN messages m
  ON CASE WHEN m.u_from_id ='14' THEN u.id = m.u_to_id 
          ELSE u.id = m.u_from_id END 
 AND (m.u_from_id='14' OR m.u_to_id='14') 
 AND m.ad_id='20'  
GROUP BY CONCAT(m.ad_id,u.id)   
ORDER by m.msg_id DESC

此查询正在运行,但我无法选择最后一个m.text Table structure

2 个答案:

答案 0 :(得分:1)

SELECT u.id, m.text
FROM user u
JOIN messages m ON m.msg_id = (SELECT max(msg_id) FROM messages WHERE u_from_id = u.id)

我简化了您的查询,以显示与您的问题相关的逻辑。基本上你想在msg_id上加入你的消息表,它等于与该用户的max msg_id的内部查询。

答案 1 :(得分:0)

经过这么多实验后添加了一个新列(bargainer)来识别收件人,这个查询对我来说很好用

select m.msg_id,m.text,m.status,m.date,m.bargainer,m.ad_id,u.first_name,u.id from user u    JOIN   messages m  where msg_id in (select max(msg_id) from messages m where m.ad_id=20 and u.id=m.bargainer group by(m.bargainer))group by(m.msg_id) order by msg_id DESC