MySQL запрос - сортировка по дате - PullRequest
1 голос
/ 20 января 2011

Я объединяю две таблицы, каждая с разными данными о событиях.В каждой таблице есть дата для событий.

Как объединить эти события, чтобы без проблем отсортировать их по дате?

SELECT 
   t1.eventName, 
   t1.eventTime, 
   t2.evntName, 
   t2.evntTime
FROM t1
LEFT JOIN t2 ON (t1.eventID = t2.eventID)
ORDER BY ??? DESC
LIMIT 10

Ответы [ 3 ]

2 голосов
/ 13 апреля 2011

@ Гонсало близко, но не совсем там. Вы должны поместить каждую таблицу в подзапросы и псевдоним каждого столбца, который вы хотите в конечном результате. Если в одной таблице нет нужного столбца из другой таблицы, используйте литерал и присваивайте ему псевдоним.

(SELECT eventName, eventTime, foo FROM t1)
UNION ALL
(SELECT evntName AS eventName, evntTime AS eventTime, NULL AS foo FROM t2)
ORDER BY eventTime DESC

Поместите любые WHERE пункты в подзапросы.

1 голос
/ 20 января 2011

Не уверен на 100%, что вы пытаетесь сделать здесь, но, возможно, это:

ORDER BY GREATEST(t1.eventTime, t2.eventTime) DESC

ETA:

Похоже, вы не можете сравнивать даты напрямую с GREATEST, поэтому вам может потребоваться сделать следующее:

ORDER BY GREATEST(UNIX_TIMESTAMP(t1.eventTime), UNIX_TIMESTAMP(t2.eventTime)) DESC
0 голосов
/ 20 января 2011

Вы присоединяетесь к таблицам, в результате чего записи обеих таблиц объединяются в одну строку.То, что вам нужно сделать, если вы действительно хотите объединить такие таблицы, - это запрос UNION.Примерно так:

SELECT eventName, eventTime FROM (
    SELECT eventName, eventTime
    FROM t1

    UNION

    SELECT eventName, eventTime
    FROM t2
)
ORDER BY eventTime

Итак, вы объединяете результаты обеих таблиц в подзапрос и сортируете их.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...