2015-06-14 74 views
2

我正在嘗試查詢WordPress帖子,並通過自定義元鍵對它們進行排序。這裏的查詢我:如何通過WordPress MySQL查詢中的元鍵值進行排序?

SELECT distinct wposts.* 
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta 
WHERE wposts.ID = wpostmeta.post_id 
AND wpostmeta.meta_key = 'closed' 
AND wpostmeta.meta_value = '1' 
AND wposts.post_status = 'publish' 
AND wposts.post_type = 'auction' 
ORDER BY (wpostmeta.meta_value AND wpostmeta.meta_key = 'end_date') ASC 
LIMIT 10 

這讓我我想要的職位,但它並不由Meta「鍵END_DATE」訂購。我也嘗試過以下格式:

$args = array(
    'post_type' => 'auction', 
    'post_status' => 'publish', 
    'posts_per_page' => 10, 
    'meta_key' => 'end_date', 
    'orderby' => 'meta_value', 
    'order' => 'DESC', 
    'meta_query' => array(
     array(
      'key' => 'closed', 
      'value' => '1', 
      'compare' => '=', 
     ) 
    ) 
); 

$closed_auctions = new WP_Query($args); 

但是,這會以隨機順序返回帖子,方式多於10次並且重複多次。

此外,我試圖訂購的字段是日期,格式爲MM/DD/YYYY,但我相信它存儲爲長文本。在訂購前我必須做任何轉換嗎?

回答

2

您可以使用STR_TO_DATE將DD/MM/YYYY轉換爲可訂購的MySQL日期。理想情況下,你會改變日期被存儲在數據庫中的方式,但如果這是不是一種選擇使用:

ORDER BY (STR_TO_DATE(wpostmeta.meta_value, '%d/%m/%Y') AND wpostmeta.meta_key = 'end_date') ASC 

延伸閱讀:http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_str-to-date

+0

這(差不多)工作,謝謝!但是,這仍然不會通過meta_key'end_date'排序結果,因爲我之前已經在查詢中將meta_key設置爲'closed'。我所做的是查詢在結束日期排序的所有拍賣,從查詢中刪除meta_key'closed',然後迭代結果數組,將第二個數組中僅存儲meta_key'closed'的帖子存儲爲1。 –

1

我不確定您是否可以實際排序格式爲MM/DD/YYYY的值。它看起來像你想存儲某種日期作爲一個元值 - 爲什麼你不使用timestamp?使用時間戳時,可以使用「meta_value_num」作爲「orderby」的值進行排序(請參閱WP Query Documentation)。

+0

插件我使用存儲在該格式的日期和我不想改變插件的核心。但感謝您的回答:) –

相關問題