Я борюсь с этим запросом.
SELECT SQL_CALC_FOUND_ROWS wp_posts.*
FROM wp_posts
LEFT JOIN wp_postmeta p1 ON ( wp_posts.ID = p1.post_id AND p1.meta_key = '_vip_post' )
LEFT JOIN wp_postmeta p2 ON ( wp_posts.ID = p2.post_id AND p2.meta_key = '_thumbnail_id' )
WHERE 1=1
AND wp_posts.post_type = 'housing'
AND (wp_posts.post_status = 'publish')
GROUP BY wp_posts.ID
ORDER BY
COALESCE( p1.meta_key, 0 )+0 DESC,
p1.meta_key DESC,
if( p2.meta_key = '' or p2.meta_key is null, 1, 0) ASC,
wp_posts.post_date DESC LIMIT 0, 20
Да, это таблица сообщений WordPress. Я присоединяюсь к столу postmeta дважды. p1.meta_key
- это 0
, 1
или null
, сохраненные в поле типа longtext
. Мне нужны строки, имеющие p1.meta_key
= 1
, чтобы быть сверху. Вместо этого он помещает поверх строк, в которых p1.meta_key
не является null
, и упорядочивает их по двум последним директивам ORDER BY
.
UPDATE
Похоже, мне нужно правильно расставить приоритеты в этом запросе. Если я удаляю wp_posts.post_date DESC
в конце запроса или просто ORDER BY следующим образом:
p1.meta_key+0 = 1 DESC,
IF ( p2.meta_key = '' or p2.meta_key is null, 2, 1 )
строки возвращаются именно так, как я хочу, но не в хронологическом порядке.
Вот что я получаю
+-----------------------+ +-------------+ +-----------------+
| post_date | + | _vip_post | + | _thumbnail_id |
+-----------------------+ +-------------+ +-----------------+
| 2012-03-18 21:47:33 | | 0 | | 533 |
| 2012-03-18 21:36:49 | | 0 | | 230 |
| 2012-03-18 20:19:50 | | 0 | | 170 |
| 2012-03-18 17:19:52 | | 1 | | 56 |
| 2012-03-20 10:42:00 | | null | | null |
| 2012-03-19 18:56:10 | | null | | null |
| 2012-03-16 03:12:32 | | null | | '' |
| 2012-03-15 16:40:22 | | null | | '' |
+-----------------------+ +-------------+ +-----------------+
Вот как мне это нужно
+-----------------------+ +-------------+ +-----------------+
| post_date | + | _vip_post | + | _thumbnail_id |
+-----------------------+ +-------------+ +-----------------+
| 2012-03-18 17:19:52 | | 1 | | 56 |
| 2012-03-18 21:47:33 | | 0 | | 533 |
| 2012-03-18 21:36:49 | | 0 | | 230 |
| 2012-03-18 20:19:50 | | 0 | | 170 |
| 2012-03-20 10:42:00 | | null | | null |
| 2012-03-19 18:56:10 | | null | | null |
| 2012-03-16 03:12:32 | | null | | '' |
| 2012-03-15 16:40:22 | | null | | '' |
+-----------------------+ +-------------+ +-----------------+