2017-05-09 16 views
0

私は2つのテーブル(メッセージとユーザ)を持っています。特定の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

答えて

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) 

tを選択することはできません私はあなたの質問に関連するロジックを表示するクエリを簡素化。基本的には、そのユーザーとのmax msg_idの内部クエリと等しいmsg_idにメッセージテーブルを結合します。非常に多くの実験の後

+0

は申し訳ありませんが私のために正常に動作し、受信者と、このクエリを特定します。 id = '14 'の人が自分の名前を選択するのではなく、そのメッセージを読んでいるので、m.u_from_id = '14'それからu.id = m.u_to_id ELSE u.id = m.u_from_id END '他の人物の名前を選択する – Sujith

+0

GROUP BY CONCAT(m.ad_id、u.id)は、特定のad_idに複数のメッセージが存在することを避けるために与えられます。混乱のために申し訳ありません。 – Sujith

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 
関連する問題