2013-07-13 44 views
0

我有兩個表:smilesmessages。我想顯示兩個表中的所有記錄:複雜的mysql查詢連接兩個表並顯示所有記錄

  • (用戶誰的loggedIn = USER_ID)
  • USER_ID =風溼或USER_ID =從微笑Sender ID和
  • USER_ID = SENDER_ID或USER_ID = receiver_id從消息

我用「或」在這裏,因爲它發生,有時user_idmessagessmiles發件人有時user_idmessagessmiles接收器,我想顯示所有其中user_id在其中的記錄。

對於向其他user_id發送消息或微笑的每個成員,我也希望總數爲messages + smiles

我要顯示的數據等下面

sender_user_name---Message+Smiles Count---Logged_user-------message 
user_123 --------------6------------------You're Sender-----this is the last message 
user_333--------------12------------------You're Receiver---this is the last message 

這裏是信息的表結構

conversation_id|message_id|sender_id|receiver_id|message|message_date|view_status 

笑容結構

id|Toid|Senderid|smile_type|send_date|view_status 

我試圖讓所有的記錄與UNION與WHERE子句但未成功。將感謝任何幫助。

消息和微笑是兩個不同的表

這裏一些更多的澄清

的如何「消息+微笑計」形成 - >計數user_007作爲在誰正在檢查消息和微笑用戶登錄。在他的賬戶中,用戶222給他發送了2條消息,用戶333給他發送了5條微笑,他自己發送了3條消息給用戶555。所以輸出將是

user222  2 received  Message Details
user333 5 Received smile type
You 3 sent to user555 message details

這裏只會顯示最後一條消息或微笑。因此,如果user_123向user_007發送了6條消息和1條微笑,則計數將爲7,並且最後顯示的消息或微笑將顯示,如果user_007將消息發送給另一個user_567,則將顯示在第二行,等等。在的問題,我還包括表structure..Appreciate你的努力

+0

我想我可以更容易理解的問題 - 我可以或多或少看到你的要求 - 但你應該提供一些樣品數據和相應的輸出。具體而言,我不清楚「消息+微笑計數」是如何形成的。假設「登錄的用戶ID」是'user_007',那麼'user_123'的6個計數是'user_123'發送給'user_007'的消息和微笑的數量?微笑獨立於消息嗎? 「這是最後一個信息」有意義嗎?這是否意味着你想從'user_123'到'user_007'的最近消息? –

+0

另一種可能的選擇是'messages + smiles count'包含'user_007'發送給'user_123'的消息,反之亦然。最後顯示的消息可能是由'user_007'發送給'user_123',而不是反過來。但是你的問題還沒有使所有這些細節清楚。請編輯它以包含必要的信息,以及足夠的數據以生成示例輸出(您可能希望將數字6和12減少到更易於管理的數字,例如3和4)。 –

+0

謝謝喬納森我已經添加了更多的澄清問題。 – Krish

回答

0

你會得到「消息加笑」加入他們,單獨計算:

select (s.numsmiles + m.nummessages) 
from (select count(*) as numsmiles 
     from smiles s 
     where $user_id in (s.toid, s.senderid) 
    ) s cross join 
    (select count(*) as nummessages 
     from messages m 
     where $user_id in (m.sender_id, m.receiver_id) 
    ) m; 

的關鍵是要計算每個分開,然後將這些值一起添加。

編輯:

如果你想這個對所有用戶,那麼最好的方法就是使用union allgroup by

select userId, sum(hasSmile) as NumSmiles, sum(hasMessage) as NumMessages, 
     sum(hasSmail + hasMessage) as NumSmilesAndMessages 
from ((select s.toid as userId, 1 as hasSmile, 0 as hasMessage 
     from smiles s 
    ) union all 
     (select s.senderid, 1 as hasSmile, 0 as hasMessage 
     from smiles s 
    ) union all 
     (select m.sender_id, 0, 1 
     from messages m 
    ) union all 
     (select m.receiver_id, 0, 1 
     from messages m 
    ) 
    ) t 
group by user_id 
+0

感謝您的解決方案。它給我總共收到或發送的登錄用戶的微笑+消息(這裏是$ user_id),但它不會給用戶帶來任何笑容和信息。例如,如果用戶123發送4條消息,並且用戶333向用戶666發送9條笑話,並且用戶666向用戶546發送2條消息比我想要輸出爲收到用戶123 4和接收用戶333 9並且發送用戶564 2 ....我是否需要添加組? – Krish