2011-04-11 56 views
1

如何從兩列的組合中選擇DISTINCT值?我創建一個線程的收件箱,很像iPhone短信系統,我想要做的線沿線的東西:在MySQL中的列X或Y中返回不同的值

SELECT DISTINCT (senderid or recipientid - whichever value != my $userid), 
name, body FROM messages 
WHERE $userid = (either senderid, recipientid - whatever is discovered first). 

對不起,是如此混亂,但這個想法是返回最新消息(不管是否消息已發送或接收)在消息傳遞系統中創建不同的線程。兩個用戶之間只能有一個線程。

編輯:這是我現在正在使用

// Pull all the girls who are being followed by $userid 

$sql = "SELECT * FROM messages 
LEFT JOIN (
    SELECT DISTINCT CASE WHEN '$userid' != senderid 
    THEN senderid ELSE recipients 
    END otherid, users.username AS sendername, messages.body, messages.time 
    FROM messages 
    WHERE messages.recipients = '$userid' OR messages.senderid = '$userid' 
) subq ON users.id = subq.otherid 
ORDER BY subq.time"; 

回答

1

的MySQL有case expression所以你可以嘗試

SELECT DISTINCT CASE when $userid != senderid then senderid 
       else recipientid end someid /*senderid or recipientid - whichever value != my $userid*/, 
       name, body  
FROM messages 
WHERE $userid = senderid 
    or $userid = recipientid; 

Select * 
from messages 
left join (SELECT DISTINCT CASE when $userid != senderid then senderid 
        else recipientid end someid /*senderid or recipientid - whichever value != my $userid*/, 
        name, body  
      FROM messages 
      WHERE $userid = senderid 
      or $userid = recipientid) subq 
    on messages.userid = subq.someid; 

請注意,我沒有測試過這syntaxt在MySQL - 我沒有一個實例來對工作...但使用的列名someid不應該是一個問題,因爲我做了該查詢存在於其他某個子查詢中。

+0

這看起來非常有前途,我從來沒有被教過關於案件的表達!我會給這個鏡頭 - 什麼是someid意味着代表? – Walker 2011-04-11 16:10:35

+0

'someid'是您給出案例表達式結果的列名。我不確定你想要怎麼稱呼它,所以我用了一些通用的東西。 – FrustratedWithFormsDesigner 2011-04-11 16:11:53

+0

嘿沮喪,最後一個問題:當我使用上面的case語句(這是完美的 - 謝謝!)如何基於someid做一個leftjoin?基本上我想這樣做:'左用戶加入users.id = someid' – Walker 2011-04-11 20:43:02

1

代碼如何像:

select distinct xx from 
(
select distinct col1 as xx from mytable 
union 
select distinct col2 as xx from mytable 
) 
+0

...你忘了WHERE子句... – FrustratedWithFormsDesigner 2011-04-11 15:37:23

1

您可以在select中使用case語句來檢查您的$ userid是否等於senderid或recipientid,然後使用另一個。

1

假設無論是senderid或recipientid將總是一致的,我會做到以下幾點:

選擇,如果(senderid == $用戶ID,senderid,recipientid)作爲用戶名,身體信息

相關問題