2011-09-09 51 views
0
$sql="SELECT MAX(mr.messageId) AS maxMessageId, mr.threadId 
     FROM messages_recipients AS mr 
     RIGHT JOIN thread_recipients AS tr ON tr.threadId=mr.threadId 
     WHERE mr.recipientUserId='2' 
     GROUP BY mr.threadId"; 

如果上面的SELECT應該可以發現message_recipients一排的1 一個的threadId和thread_recipients擁有的threadId = 1 .. 多行則是因爲我有一個RIGHT JOIN , 我希望它返回的行數與thread_recipients中的行數相同,其中threadId = 1右連接不返回正確的行數

但是,只是返回一行,無論如何......你能告訴我爲什麼這樣做嗎?

回答

0

右連接意味着連接表中的所有行都將返回,右表中的任何不匹配的行都填充了空值。

我看不出爲什麼你不使用內部連接嗎?

您只返回一個值的原因是您正在使用mr.threadid進行分組。如果所有行都有一個threadid = 1,那麼group by會將它們全部分組到一行中。

我誤解了這個問題嗎?

+0

Thanks @Martin Nielson。那麼,如何使查詢工作,以便它將選擇表中的所有行thread_recipients其中tr.threadId = mr.threadId並在同一時間GROUP BY mr.threadId獲得maxMessageId ...您的持續支持是非常感謝..問候J – jon

+0

你到底想要什麼回報。別管這些行的ID等等,你想完成什麼? –