2016-06-23 8 views
0

は、我々は、サンプルデータと、他のユーザーだけでなく、2は、会話リストクエリ

enter image description here

でテーブルの次のような構造を持っていると仮定ゲットしたがって、この場合には私のようなすべての二人のユーザ間の唯一の1つの会話を受けなければなりません35

から1と 1に

35しかし、私は、以下のクエリを試してみましたが、私は2人の会話

を得ました
select msg_id,msg_from,msg_to,msg_content,msg_status,msg_created_at, 
    (select user_name from users where user_id = msg_from) user_name 
    from messages where msg_id in 
    (select max(msg_id) from messages) 
    and msg_to = 35 or msg_from = 35 

正しい結果を得るためにお手伝いください。

+1

、制約からとの両方: 'と((msg_to = 35とmsg_from = 1)または(msg_to = 1とmsg_from = 35))'おそらくあなたはユーザー1とは別のパーティーをユーザー35と話しています。また、 'or'タームのまわりに括弧'() 'がありません。 – ebyrob

+0

私は2人のユーザーしかいません:( –

+0

)元のクエリは、その周りに 'または'があるために 'msg_from = 35'で何かを返すでしょう。 b)会話の両端(1と35)を制限する必要があります(35)。 – ebyrob

答えて

1

を、私はあなたが括弧の間に条件msg_to = 35 or msg_from = 35を入れて、最大のIDを返すサブクエリ内に移動すべきだと思います。以下のコードのように:あなたが唯一の1人の会話をしたい場合は

select msg_id,msg_from,msg_to,msg_content,msg_status,msg_created_at, 
(select user_name from users where user_id = msg_from) user_name 
from messages where msg_id in 
(select max(msg_id) from messages 
where (msg_to = 35 or msg_from = 35)) 
1

あなたはor文の周りに括弧を忘れてしまった:

select msg_id,msg_from,msg_to,msg_content,msg_status,msg_created_at, 
    (select user_name from users where user_id = msg_from) user_name 
from messages where msg_id in 
    (select max(msg_id) from messages) 
    and (msg_to = 35 or msg_from = 35)