2014-09-01 65 views
1

在WordPress如何才能內薈萃字段值取特定的順序記錄,比如我需要獲取所有記錄ZIP_CODE(meta鍵名)是60007比第一所有領域的所有60143比60191WordPress的定製MySQL查詢

表drrr_posts

Id | post_name | content 
2 
3 
4 
22 
32 
43 

表drrr_postmeta

id | meta_key | meta_value |  post_id 
1 | zip_code | 60143  | 2 
2 | zip_code | 60007  | 3 
3 | zip_code | 60191  | 4 
4 | zip_code | 60143  | 22 
5 | zip_code | 60007  | 32 
6 | zip_code | 60143  | 43 

我認爲問題是我傳遞ORDER BY FIELD(drrr_postmeta.meta_value沒有ZIP_CODE這是meta_key 在MySQL中我可以很容易地通過值ORDERBY像

ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C') 

這裏是我現在 有我的查詢是

SELECT SQL_CALC_FOUND_ROWS drrr_posts.ID 
FROM drrr_posts 
INNER JOIN drrr_term_relationships ON (drrr_posts.ID = drrr_term_relationships.object_id) 
INNER JOIN drrr_postmeta ON (drrr_posts.ID = drrr_postmeta.post_id) 
INNER JOIN drrr_postmeta AS mt1 ON (drrr_posts.ID = mt1.post_id) 
WHERE 1 =1 
AND drrr_posts.ID NOT 
IN (91, 89, 87, 66) 
AND (
drrr_term_relationships.term_taxonomy_id 
IN (11) 
) 
AND drrr_posts.post_type = 'doctors' 
AND (
(
drrr_posts.post_status = 'publish' 
) 
) 
AND (
drrr_postmeta.meta_key = 'zip_code' 
AND (
mt1.meta_key = 'zip_code' 
AND CAST(mt1.meta_value AS SIGNED) 
IN (
'60007', '60143', '60191', '60005', '60106', '60157', '60173', '60008', '60056', '60172' 
) 
) 
) 
GROUP BY drrr_posts.ID 
ORDER BY FIELD(drrr_postmeta.meta_value, '60007', '60143', '60191', '60005', '60106', '60157', '60173', '60008', '60056', '60172') 
LIMIT 0 , 8 

回答

1

您可以通過,增加一個條件定單訂購您的結果通過meta_key也是你的GROUP BY語句不作任何意義上不存在聚集本功能的離子,現在你可以做到這一點

ORDER BY 
drrr_postmeta.meta_key ='zip_code' desc, 
FIELD(drrr_postmeta.meta_value, '60007', '60143', '60191', '60005', '60106', '60157', '60173', '60008', '60056', '60172') 

使用drrr_postmeta.meta_key ='zip_code'將導致爲布爾值,如果兩場比賽,因此訂貨會結果首先ZIP_CODE匹配meta_key然後你field()功能會相應結果進行排序

+0

返回true這給了我一個錯誤http://puu.sh/bhgAf/42811343f0.png – June 2014-09-01 19:03:39

+0

@June現在嘗試我的糟糕的錯過逗號後desc – 2014-09-01 19:05:08

+0

結果仍然是一樣的是否有任何手段我可以發送給你的數據庫表? – June 2014-09-01 19:06:59