2012-02-22 42 views
0

對於通知系統,我嘗試使用多行完全分離的數據,並使用unix時間戳對它們進行排序。來自每行的數據通過使用用戶USERID進行選擇,然後應該在行發生時對行進行排序。對多行數據進行SQL排序而不結合行

例如,被選中的表之一將是:

- USERID msgid timestamp 
- 3  5  1234567 

選擇所有相關數據後,最後一個表應該是這樣的:

- USERID msgid postid playerpostid  friendrequestid  timestamp 
- 3   5              1234567 
- 3     5            1234566 
- 3  1234             1234565 
- 3        542        1234564 

正如你可以看到,表中的所有結合起來,但唯一連接它們的是USERID,並按時間戳排序。

我試過連接,不幸的是,結果倍數變成了可笑的結果。

回答

4
SELECT * FROM (
    SELECT 
    USERID, msgid, NULL AS postid, NULL AS playerpostid, NULL AS friendrequestid, timestamp 
    FROM messages 
    WHERE USERID=3 

    UNION ALL 

    SELECT 
    USERID, NULL AS msgid, postid, NULL AS playerpostid, NULL AS friendrequestid, timestamp 
    FROM posts 
    WHERE USERID=3 

    UNION ALL 

    SELECT 
    USERID, NULL AS msgid, NULL AS postid, playerpostid, NULL AS friendrequestid, timestamp 
    FROM playerposts 
    WHERE USERID=3 

    UNION ALL 

    SELECT 
    USERID, NULL AS msgid, NULL AS postid, NULL playerpostid, friendrequestid, timestamp 
    FROM friendrequests 
    WHERE USERID=3 
) AS baseview 
ORDER BY timestamp 
+0

啊謝謝你先生 – JimmyBanks 2012-02-22 00:31:05

+0

你可以安全地使用'UNION ALL'來獲得更好的性能。以防萬一你刪除了'WHERE'條件並且你有很多行。默認值是'UNION DISTINCT',對於大表格可能會很慢。 – 2012-02-22 01:35:39