Задать вопрос
@awenn2015
Веб-программист самоучка

Как сортировать записи по двум полям в sql запросе, обычному и произвольному без фильтрации?

Вот что пока что пришло в голову:

SELECT wp_posts.ID, wp_posts.post_title, wp_postmeta.meta_value FROM wp_posts
LEFT JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'pinned'
WHERE wp_posts.post_type  = 'partners' 
# AND wp_postmeta.meta_key = 'pinned' 
# ORDER BY wp_posts.post_date DESC LIMIT 25
ORDER BY IF(wp_postmeta.meta_value, CAST(wp_postmeta.meta_value AS UNSIGNED), wp_posts.post_date) ASC, wp_posts.post_date DESC
LIMIT 25


В решении основывался на варианте с wp-kama но без обертки над WP_Query так как она оказалась не рабочей, так что пошел думать как это реализовать на чистом SQL запросе,

Суть задачи собственно какая, нужно отсортировать записи по дате и произвольному полю "pinned" но без самой фильтрации (что get_posts / WP_Query почему то не умеют делать и фильтруют записи даже если не указывать meta_value, меня такое не особо устраивает), нюансы сортировки, сначала должны выводиться закрепленные записи в ASC (хотя в теории не особо критично, главное что бы шли первые) в после уже остальные "не закрепленные" по дате (или любому другому полю в ASC/DESC, текущий вариант не позволяет так делать
  • Вопрос задан
  • 173 просмотра
Подписаться 2 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
@awenn2015 Автор вопроса
Веб-программист самоучка
А все, в phpmyadmin на тыкал по колонкам как нужно, даже и думать не пришлось и получился такой вариант

SELECT wp_posts.ID, wp_posts.post_title, wp_posts.post_date, wp_postmeta.meta_value FROM wp_posts 
LEFT JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'pinned' 
WHERE wp_posts.post_type = 'partners' 
ORDER BY `wp_postmeta`.`meta_value` DESC, `wp_posts`.`ID` DESC LIMIT 25


Хоть он конечно и не покрывает 100% задачу так как тут сортировка все равно общая какая то получается, мы сначала поднимает закрепленные а потом сортируем всё по ID, хотелось бы иметь возможность сортировать отдельно поднятые и все остальные по разному
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы