2011-08-15 12 views
0

Iは、
jos_messages => 'MESSAGE_ID(PK)'、 'メッセージ'、 'TOUSER IDを' from_user_id 'MySQLがテーブルに参加

jos_message_thread => 'PKをthread_idを'、' FK 3つのテーブルMESSAGE_IDました」、 '私は1つの結果のデータを返すために、このテーブルでクエリを作成する必要がありto_user_id '

jos_users => 'USER_ID(FK)'、 'ファーストネーム'、 'アバター'

'、' from_user_id 、データは次のとおりです。 メッセージの送信者(jos_users)の最後のメッセージ(jos_messages)、ファーストネームおよびアバター

メッセージ:

FIRSTNAME "こんにちは、これは最後に挿入messsageです":

"ledif" アバター: "http://a.com/a.png" ULTは、このようなものでなければなりません

私は今この質問をしていますが、問題は返されたメッセージが最後に挿入されたメッセージではないことです。

SELECT jmt.from_user_id, jm.message, ju.firstname, ju.avatar 
FROM jos_messages_thread AS jmt 
LEFT JOIN jos_messages AS jm ON jm.message_id = jmt.message_id 
LEFT JOIN jos_comprofiler AS ju ON ju.user_id =  jmt.from_user_id 
WHERE jmt.to_user_id ='$user_id' 
AND jmt.thread_owner ='$user_id' 
GROUP BY jmt.from_user_id 

左側の結合クエリの途中でjm.message_idをORDERする方法はありますか?

LEFT JOIN jos_messages AS jm ON jm.message_id = (LAST INSERTED) jmt.message_id 

ありがとうございます。私の質問があまり明確でないならば、私は英語でうまくいきません。

+0

message_idは自動的にインクリメントされますか?もしそうなら、最後に挿入されたメッセージは、最も大きなIDを持つものになります –

+0

@ハンターマクミレンええそうです。それは私が期待していたものでしたが、それは起こりませんでした。 – janusbalatbat

+0

あなたは 'ORDER BY'ステートメントも含める必要があります。あなたが最大のidを与える 'ORDER BY message_id DESC LIMIT 1'を実行する場合 –

答えて

0

ORDER BYを結合の途中に挿入する必要はありません。結合の途中でORDER BYを挿入する方法があったとしても、挿入する必要はありません。クエリ全体の末尾にちょうどORDER BY jm.message_id DESCを置き、結果を最初の行に限定するにはLIMIT 1を使用します。

0
LEFT JOIN jos_messages AS jm ON jm.message_id = (Select jthread.message_id from jos_messages_thread Order By jthread.message_id desc Limit 1) 
+0

私はそれを試みましたが、すべての行に対して1つのメッセージデータを返します。 – janusbalatbat