2016-07-23 19 views
0

私はあなたの助けが必要です!get last会話

問題:ユーザー間にメッセージシステムがあり、すべての会話の最後の会話を取得する必要があります。これは、user1とuser2の間のメッセージが早くて、最後に書き込まれたメッセージと会話を取得する必要があることを意味します。

私の「メッセージ」テーブル構造はこれです:

'id' | 'uidfrom' | 'uidto' | 'content' | 'cdate' 

enter image description here

「uidfromは、」メッセージと「uidto」を書いたユーザーがメッセージを受信したユーザです。

皆さんは考えているのですか、最後の会話をキャッチすることは可能ですか?この場合、最後に書かれたメッセージは 'id' = 5で、今度は 'uidfrom' = 1 AND 'uidto' = 2 + 'uidfrom' = 2 AND 'uidto' = 1の会話全体を取得する必要があります。

EDIT:クエリは動的である必要があります。したがって、最新のメッセージと会話を返すべきです。例えば。 id = 3というメッセージが2016-07-19- 17:13:50に書き込まれた場合、このメッセージは、このタイプの会話に1つしかないので、このメッセージを返す必要があります。これ以上のアイデアをお願いしますか?

答えて

0
Select * 
from message 
where 
    uidfrom IN (select uidfrom,uidto from message order by id desc limit 0,1) AND 
    uidto IN (select uidfrom,uidto from message order by id desc limit 0,1) 
+0

素早く対応してくれてありがとう!私はあなたのクエリを試していましたが、まず最初に私はエラー 'このバージョンのMariaDBはまだ' LIMIT&IN/ALL/ANY/SOMEサブクエリ 'をサポートしていません。 (s) 'と呼びます。だから私はこのクエリ 'SELECTになってしまったこの問題を解決するには* \t \tメッセージから(BYメッセージORDER FROM uidfrom SELECT \t \t(ID DESC BYメッセージORDER FROM uidfrom SELECT)ではuidfromとIn uidto \t \t \t \t id DESC) 'を実行します。ありがとう! –

+0

どのメッセージが最後に書き込まれたかを調べ、会話に追いつくためにuidfrom + uidtoを選択できますか?今のところ私はいつも同じ会話をしますが、 'id 3のメッセージがその後' id 5のメッセージ 'と書かれても、私はまだ 'user 1'と' user 2 'の会話を得ます。 –

0

メッセージからuidto、 (、ID =は、(メッセージからMAX(ID)を選択し、メッセージからuidtoをuidfrom選択))ではuidfromと 、IN uidtoは(uidfromを選択するメッセージ から * を選択してみてくださいID =(メッセージからMAX(id)を選択します))

+0

' IN(id =(メッセージからmax(id)を選択してください))と 'uidto ' 1」、「id = 5」となる。したがって、 'Id = 2'と' Id = 4'は結果に含まれません。 –

0

これはあなたの中から1、2、4、5

選択*行与えるstack1場所(IN uidfromからuidfrom選択であろうあなたのために働くべき場所stack1ここで、id =(スタック1からmax(id)を選択)UNIO Nは、スタック1からuidtoを選択します。ここで、id =(select max(id)from stack1))とuidto(stack1からのuidfromを選択します。 id1)from stack1))

+0

はい、他のクエリと同様に機能しますが、最後の会話を動的に取得する必要があります。だから、私はこれらのことがクエリにある必要があると思う:最後に書かれたメッセージを得るためのものと最後に書かれたメッセージに基づいて会話全体を得るもの –