2014-09-22 84 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