Как выбрать максимум из двух элементов каждой строки в MySQL - PullRequest
0 голосов
/ 02 марта 2012

У меня есть таблица, которая является результатом (My) SQL-запроса. В этой таблице у меня есть метка времени создания поста и метка времени создания комментария пользователя. Хитрость заключается в том, что не все сообщения имеют комментарий (поэтому некоторые comment_creation имеют значение NULL).

Я хотел бы упорядочить строки в соответствии с самым последним временем создания сообщения или комментария пользователя.

Как я могу получить max(post_creation, comment_creation) каждой строки и упорядочить их (DESC порядок)?

Спасибо за весь вклад.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Исходя из вашего предыдущего вопроса, попробуйте:

SELECT p.id AS post_id, 
       p.author_id AS post_author_id, 
       p.created_date AS post_created,
       c.author_id AS comment_author_id,
       c.created_date AS comment_created,
       p.title, 
       c.content,
       coalesce(c.created_date,p.created_date) AS sort_date
FROM Posts p 
LEFT JOIN Comments c ON p.id = c.post_id
WHERE p.author_id = $userId
UNION ALL
SELECT p.id AS post_id, 
       p.author_id AS post_author_id, 
       p.created_date AS post_created,
       c.author_id AS comment_author_id,
       c.created_date AS comment_created,
       p.title, 
       c.content,
       c.created_date AS sort_date
FROM Posts p 
RIGHT JOIN Comments c ON p.id = c.post_id
WHERE c.author_id = $userId
ORDER BY sort_date
0 голосов
/ 02 марта 2012

Учитывая, что ваш стол выглядит примерно так ...

CREATE TABLE `yourtable` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `post_creation` timestamp NULL DEFAULT NULL,
  `comment_creation` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM;

... SELECT -запрос можно сделать так:

SELECT IF(comment_creation > post_creation, 
          comment_creation, 
          post_creation) AS sortorder,
       id
FROM yourtable
ORDER BY sortorder DESC;
...