Каждая таблица (таблица1 и таблица2) имеет собственное поле DATETIME.
Я пытаюсь поймать идентификаторы двух таблиц и упорядочить их по полю 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 id: 2, 1,
из таблицы 1 id: 3, 2, 1
Итак: 2, 1, 3, 2, 1
////РЕДАКТИРОВАТЬ
Для людей, которые могут бороться с длинным и сложным запросом MySQL, попробуйте его в PhpmyAdmin! Он скажет вам об ошибке!
////РЕДАКТИРОВАТЬ
Что вам действительно нужно сделать, так это более тщательно рассмотреть вашу схему. Подумайте, именовать столбцы времени даты одинаково, а затем запустить такой запрос: http://sqlfiddle.com/#!2/a3b4c/7/0
SELECT selection, id, datetimefoo, user FROM ( SELECT 1 AS selection, table1.id, table1.datetimefoo, table3.user FROM table1 LEFT OUTER JOIN table2 ON table1.id = table2.table1id LEFT OUTER JOIN table3 ON table1.id = table3.id UNION SELECT 2 AS selection, table1.id, table1.datetimefoo, table3.user FROM table1 INNER JOIN table2 ON table1.id = table2.table1id INNER JOIN table3 ON table1.id = table3.id ) AS T2 ORDER BY datetimefoo DESC
В скрипте SQL это дает результаты ближе к тому, что вы ищете. Я все еще не уверен, почему вам нужен INNER JOINS по второму запросу, хотя – нет ничего, что вы делаете здесь, в котором они нуждаются.
Вот еще один метод, который не требует изменения имен столбцов, но требует псевдонима для сортируемых столбцов – http://sqlfiddle.com/#!2/ec4bc/3/0
SELECT * FROM ( SELECT 1 AS selection, table1.id, table1.datetimefoo AS sort_date, -- alias on first table's date table2.datetimebar, table3.user FROM table1 LEFT OUTER JOIN table2 ON table1.id = table2.table1id LEFT OUTER JOIN table3 ON table1.id = table3.id UNION SELECT 2 AS selection, table1.id, table1.datetimefoo, table2.datetimebar AS sort_date, -- alias on second table's date table3.user FROM table1 INNER JOIN table2 ON table1.id = table2.table1id INNER JOIN table3 ON table1.id = table3.id ) AS T2 ORDER BY sort_date DESC
Я считаю, что вы слишком усложняете довольно прямолинейную задачу:
SELECT * FROM ( SELECT 1 AS selection, table1.id as id, table1.datetime1 as date FROM Table1 UNION ALL SELECT 2 AS selection, table2.id as id, table2.datetime2 as date FROM Table2 ) AS query ORDER BY date DESC