我與這個查詢鬥爭。mySQL - 連接和ORDER BY一個/零/空值
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
是存儲在longtext
字段類型中的0
,1
或null
。我需要有p1.meta_key
= 1
的排在最前面。相反,它放在p1.meta_key
不是null
的行的頂部,並按最後兩條ORDER BY
指令排序。
UPDATE
看起來我需要把我的工作重點就在此查詢。如果我從查詢的結尾處,刪除wp_posts.post_date DESC
或者只是爲了通過這樣的:
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 | | '' |
+-----------------------+ +-------------+ +-----------------+
仍然沒有運氣。在嘗試絕望的變體時,我刪除了最後一個'ORDER BY'條件'wp_posts.post_date DESC',它按照'p1.meta_key'正好排序,但不按時間順序排序。 – Zlatev 2012-03-22 13:26:39
@Zlatev,你可以發佈你的結果看起來像你的答案,並顯示你想要他們排序的實際順序的額外列...我們會讓你在那裏... – DRapp 2012-03-22 13:32:38
希望現在清楚。 – Zlatev 2012-03-22 14:14:43