2012-06-25 47 views
1

我有一個消息系統(非常基本的)做出1列的查詢有這樣一個表:如何通過從兩列選擇的mysql

**MESSAGE_ID** **RUSER_ID** **SUSER_ID** **MESSAGE_DATA** **DATE** 

RUSER是接收用戶,而且的suser是發送用戶。如果我想輸出一個查詢,將輸出某個用戶的消息,我現在會做:

從PRIVATE_MESG選擇*其中RUSER_ID = $ USER_ID或SUSER_ID = $ USER_ID

這會給我所有MESSAGE_ID的與該USER_ID關聯。我想要的是創建一個列,該列只能生成與特定用戶關聯的RUSER_IDSUSER_ID關聯的ID。我需要它來選擇RUSER_ID或SUSER_ID是等於USER_ID的消息,但只顯示一個不是USER_ID

然後,我會想通過查詢的輸出做一組。

任何幫助,非常感謝!

謝謝!

更新我並不是真的在尋找一個message_id,我只是在尋找那個人已經寫過或接收過的用戶列表。

UPDATE 大家都知道,我完全接受了這個問題的答案!後來我調整了它,以便它也按照從最新到最舊的日期顯示它們。我通過使用DATE()和TIME()函數將DATETIME拆分爲DATE和TIME來做到這一點。這是我的最終查詢:

SELECT 
    IF(RUSER_ID = $USER, SUSER_ID, RUSER_ID) as THE_OTHER_GUY, DATE(DATE) as DAY, TIME(DATE) as TIME 
    FROM PRIVATE_MESG 
    WHERE RUSER_ID = $USER 
OR SUSER_ID = $USER; 
group by THE_OTHER_GUY ORDER BY DAY DESC, TIME DESC 

希望這有助於下一個人!

回答

1

可以查詢:

SELECT 
    *, 
    IF(RUSER_ID = $USER_ID, SUSER_ID, RUSER_ID) as THE_OTHER_GUY 
FROM PRIVATE_MESG 
WHERE RUSER_ID = $USER_ID 
    OR SUSER_ID = $USER_ID; 
+0

這確實有用!你知道哪一個會更有效率嗎?如果還是工會? – Linux4Hope

+0

如果你在RUSER_ID和SUSER_ID上有索引,那麼聯合可能會更有效率,但如果你想計算其他一些列,它可能會變得非常冗長:) –

+0

我是一名初學者程序員(18歲),所以我把術語Indexes鬆散地並非100%確定描述它們的最佳方式。這兩列會鏈接回另一個表(USER_ACCOUNTS)。這是否意味着它們是索引?此外,你的答案真的幫助我更多地瞭解mysql ...謝謝! – Linux4Hope

0
SELECT SUSER_ID FROM PRIVATE_MESG WHERE RUSER_ID=$USER_ID 
UNION 
SELECT RUSER_ID FROM PRIVATE_MESG WHERE SUSER_ID=$USER_ID 

它檢索:
- 誰在收到$ USER_ID

消息和工會組2只列出了用戶ID列表 - 誰發送的郵件,以$ USER_ID
用戶ID列表單個結果集。

+0

不結合的毗連他們?例如,如果RUSER = 11,SUSER = 12,它看起來像這樣:1112? 我沒有嘗試group_concat只是因爲我覺得它會像Concat 欣賞快速反應! – Linux4Hope

+0

不完全是,因爲我不是真的在尋找message_id,因爲我只是該用戶寫入或接收的用戶列表。 – Linux4Hope

+0

這確實有用!你知道哪一個會更有效率嗎?如果還是工會? – Linux4Hope