У меня SQL-запрос с левым соединением, который работает отлично. Однако у меня возникают трудности с заказом результатов.Как заказать SQL-запрос слева Присоединиться к результату
Запрос выглядит следующим образом:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) LEFT OUTER JOIN wp_posts recent ON recent.post_parent = wp_posts.ID AND recent.post_type = 'ticket_reply' AND recent.post_author = wp_posts.post_author WHERE 1=1 AND ((wp_postmeta.meta_key = '_wpas_status' AND CAST(wp_postmeta.meta_value AS CHAR) = 'open')) AND wp_posts.post_type = 'ticket' GROUP BY wp_posts.ID ORDER BY CASE WHEN recent.post_parent IS NULL THEN 0 ELSE 1 END, recent.post_date DESC, wp_posts.post_date DESC LIMIT 0, 20
Запрос работает нормально и правильно отсортирован дата-накрест.
Однако записи, которые не находятся на пересечении (то есть записи типа ticket
, у которых нет ticket_reply
детей), отображаются последними. Мне нужны те, которые будут отображаться первыми, а затем отображать остальные по дате, как показано в исходном запросе.
Я не уверен, что этот запрос достаточно ясен. Если нет, сообщите мне, какие уточнения необходимы, и я сделаю все возможное, чтобы уточнить.
К сожалению, это не изменяет порядок. Тем не менее, я понимаю, что я мог оставить важную часть информации из исходного запроса: добавилось первое внутреннее соединение. Возможно, это изменяет поведение «ORDER BY». Я отредактировал исходный SQL-запрос. – Julien
@Julien Можете ли вы опубликовать некоторые примеры данных, чтобы мы могли воспроизвести проблему? –
Я точно не знаю, какой образец данных лучше всего использовать. Вот дамп моей таблицы wp_posts. Это происходит из среды моего dev, поэтому в нем может быть глупа или два. http://jmp.sh/AZyzf09 Идея состоит в том, чтобы сначала получить билеты без ответа («Мой третий билет» и «Мой первый билет»), а затем «Мой второй билет», на который есть ответ. – Julien