2014-09-22 22 views
-2

////編輯MySQL的UNION,爲了通過日期時間從2個表

的人誰可以用長而複雜的MySQL的請求strugeling,請嘗試在phpMyAdmin!它會告訴你錯誤!

////編輯

每個表(表1 &表2)有自己的時間字段。
我試圖捕捉兩個表的id,並按他們的DATETIME字段排序。

例子:

Table 1      Table 2 
------------     ------------- 
id | datetime1    id | table1id | datetime2 
------------------------  ----------------------- 
1 | 2014-09-21 20:31:26  1 | 2   | 2014-09-21 20:31:29 
2 | 2014-09-21 20:31:27  2 | 3   | 2014-09-21 20:31:30 
3 | 2014-09-21 20:31:28 

Table 3      
------------    
id | user    
------------------------ 
2 | phil     
3 | nathalie 

我的輸出是不是跟這個嘗試正確下令:

SELECT * 
FROM (
    SELECT 
    1 AS selection, 
    table1.id, table1.datetime1, 
    table2.datetime2 
    table3.user 
    FROM Table1 
    LEFT OUTER JOIN table2 
    ON table1.id = table2.table1id 
    LEFT OUTER JOIN table3 
    ON table1.id = table3.id 

    UNION ALL 

    SELECT 
    2 AS selection, 
    table1.id, table1.datetime1, 
    table2.datetime2 
    table3.user 
    FROM Table1 
    INNER JOIN table2 
    ON table1.id = table2.table1id 
    INNER JOIN table3 
    ON table1.id = table3.id 
) AS query 
ORDER BY table1.datetime1 DESC, table2.datetime2 DESC 

所需數據:
從表2編號:2,1,從表1中
id:3,2,1
So:2,1,3,2,1

+0

編輯的目的是什麼?在編輯完成之後,它已經被封閉,作爲你之前的問題的一個謎題?如果您想更新問題,請編輯原始問題而不是重新發布。 – 2014-09-23 16:31:14

回答

0
SELECT 
1 AS selection, 
table1.id, table1.datetime1, 
table2.datetime2 
table3.user 
FROM Table1 
LEFT OUTER JOIN table2 
ON table1.id = table2.table1id 
LEFT OUTER JOIN table3 
ON table1.id = table3.id 
ORDER BY table2.datetime2 DESC 

UNION ALL 

SELECT 
2 AS selection, 
table1.id, table1.datetime1, 
table2.datetime2 
table3.user 
FROM Table1 
INNER JOIN table2 
ON table1.id = table2.table1id 
INNER JOIN table3 
ON table1.id = table3.id 
ORDER BY table1.datetime1 DESC 

ORDER BY需要在每個查詢上都有一個UNION。

+0

MySQL在每個查詢中不接受這個ORDER BY ...你確定這是可能的嗎? – gr3g 2014-09-22 15:34:08

+0

你是什麼意思「不接受」?您正在運行兩個單獨的查詢,並將UNION應用於結果。 – 2014-09-22 15:35:07

+0

我也將這個答案放在你原來的問題上。 – 2014-09-22 15:41:28

0

您需要通過條款給每個子查詢自己的訂單:

SELECT * 
FROM (
    SELECT 
    1 AS selection, 
    table1.id, table1.datetime1, 
    table2.datetime2 
    table3.user 
    FROM Table1 
    LEFT OUTER JOIN table2 
    ON table1.id = table2.table1id 
    LEFT OUTER JOIN table3 
    ON table1.id = table3.id 
    ORDER BY table1.datetime1 DESC 
    )t1 

    UNION ALL SELECT * 
    FROM (
    SELECT 
    2 AS selection, 
    table1.id, table1.datetime1, 
    table2.datetime2 
    table3.user 
    FROM Table1 
    INNER JOIN table2 
    ON table1.id = table2.table1id 
    INNER JOIN table3 
    ON table1.id = table3.id 
    ORDER BY table2.datetime2 DESC 
    ) t2 

編輯 所以在這種情況下,你應該把在一列和秩序的所有日期時間由外條款

 SELECT * 
FROM (
    SELECT 
    1 AS selection, 
    table1.id, table1.datetime1 as dtime, 
    table3.user 
    FROM Table1 
    LEFT OUTER JOIN table2 
    ON table1.id = table2.table1id 
    LEFT OUTER JOIN table3 
    ON table1.id = table3.id 
    )t1 

    UNION ALL SELECT * 
    FROM (
    SELECT 
    2 AS selection, 
    table1.id, 
    table2.datetime2 
    table3.user 
    FROM Table1 
    INNER JOIN table2 
    ON table1.id = table2.table1id 
    INNER JOIN table3 
    ON table1.id = table3.id 
    ) t2 

    ORDER BY dtime DESC 
+0

這是有效的,但是當我在table2上添加一個沒有id的table1(如table1中的第一個id)時,輸出是:2.2,2.1,1.4,1.3,1.2,1.1,應該是1.4,2.2,2.1,1.3,1.2, 1.1 – gr3g 2014-09-22 15:49:00

+0

請參閱編輯 – andrew 2014-09-22 16:12:33

+0

所以你的意思是不可能有2個表中的2個日期時間字段所需的輸出? – gr3g 2014-09-22 16:25:05