2012-02-22 19 views
0

通知システムでは、完全に分離されたデータを複数行取り込み、unixタイムスタンプを使用して並べ替えようとしています。各行のデータは、ユーザーのUSERIDを使用して選択され、行は発生した時点から順序付けされます。すべて、あなたが見ることができるようにSQLを並べ替えることなく複数のデータ行を並べ替える

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

テーブル:すべての関連データを選択した後、最終的なテーブルは以下のようになります

- USERID msgid timestamp 
- 3  5  1234567 

例えば、選択されたテーブルの一つは次のようになりますそれらを結びつける唯一のものはUSERIDであり、タイムスタンプ順です。

Iveは結合を試みましたが、残念ながら結果にはばかげた結果が生じます。

答えて

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

Ahありがとうございました – JimmyBanks

+0

安全に 'UNION ALL'を使用すると、パフォーマンスが向上します。あなたが 'WHERE'条件を削除した場合、あなたは多くの行を持っています。デフォルトは 'UNION DISTINCT'です。大きなテーブルでは非常に遅くなります。 –