2013-07-16 70 views
1

首先讓我給你們的SQLFiddle:http://sqlfiddle.com/#!2/1d8bd/11返回所有行具有一定條件的所有的

我一直在這一段時間,現在面臨一些程序員(和作家)塊。

這是我試圖在MySQL中完成的樣本僞代碼:

Return all rows WHERE { 
    IF `to_user_id` = '27' AND `to_delete` >= SUBDATE(NOW(), INTERVAL 720 HOUR) 
    RETURN to_delete as del_time, COUNT(*), MAX(subject), 

     - OR - 

    IF `from_user_id` = '27' AND `from_delete` >= SUBDATE(NOW(), INTERVAL 720 HOUR)) 
    RETURN from_delete as del_time, COUNT(*), MAX(subject), 
} GROUP BY thread_hash 

我基本上是建立一個私人的郵件系統,這是代表垃圾桶查詢。具有相同thread_hash的行表示線程中的消息。當用戶從其收件箱中刪除線程時,它會將該特定thread_hash的所有to_delete設置爲NOW()。當用戶從他們的發送箱中刪除一個線程時,它將所有的from_delete設置爲NOW(),該特定的thread_hash

我試圖建立應該返回所有行如果to_user_id = $ USER_ID和to_delete已經或如果from_user_id = $ USER_ID和from_delete有一個值,由thread_hash(即線程分組你從刪除的值查詢您的收件箱或發件箱)

我希望我在這裏清楚。請讓我知道我是否可以清除其他任何事情。

回答

1

你很近,一個簡單的UNION ALL應該做你想做的;

SELECT MAX(del_time), COUNT(*) cnt, MAX(subject) subject FROM (
    SELECT to_delete del_time, thread_hash, subject 
    FROM messages 
    WHERE to_user_id = 27 AND `to_delete` >= SUBDATE(NOW(), INTERVAL 720 HOUR) 
    UNION ALL 
    SELECT from_delete del_time, thread_hash, subject 
    FROM messages 
    WHERE from_user_id = 27 AND `from_delete` >= SUBDATE(NOW(), INTERVAL 720 HOUR) 
) a 
GROUP BY thread_hash; 

The modified SQLfiddle for testing

+0

謝謝,這個工作非常好。你能不能幫我寫一個基於這個查詢的查詢,選擇'to_user_id'或'from_user_id',哪個不是'27'作爲臨時列?我想加入一個單獨的表格,將用戶的個人資料/信息 – Xecure

+0

不用擔心,我明白了。以供未來參考:http://sqlfiddle.com/#!2/f86bc5/6 – Xecure