2011-09-03 56 views
0

好了,所以通過WordPress的,我已經utimately結束了與下面的查詢字符串:PHP查詢職位並添加unqueried帖子結束

"SELECT * FROM wp_z4azbl_posts 
LEFT JOIN wp_z4azbl_postmeta ON(
    wp_z4azbl_posts.ID = wp_z4azbl_postmeta.post_id) 
LEFT JOIN wp_z4azbl_term_relationships ON(
    wp_z4azbl_posts.ID = wp_z4azbl_term_relationships.object_id) 
LEFT JOIN wp_z4azbl_term_taxonomy ON(
    wp_z4azbl_term_relationships.term_taxonomy_id = wp_z4azbl_term_taxonomy.term_taxonomy_id) 
LEFT JOIN wp_z4azbl_terms ON(
    wp_z4azbl_terms.term_id = wp_z4azbl_term_taxonomy.term_id) 
WHERE wp_z4azbl_term_taxonomy.taxonomy = 'opportunitytype' 
AND wp_z4azbl_posts.post_status = 'publish' 
AND wp_z4azbl_posts.post_type = 'opportunities' 
AND wp_z4azbl_postmeta.meta_key = 'date_timestamp' 
GROUP BY wp_z4azbl_posts.ID 
ORDER BY wp_z4azbl_postmeta.meta_value ASC" 

最終這個工程。它使用時間戳自定義字段抓取我的帖子並按升序對其進行排序。不過,我還需要它在所有具有時間戳的帖子後追加沒有時間戳的帖子。

所以,現在,它顯示是這樣的:

Event Title 
January 1, 2011 

Event Title 2 
January 2, 2011 

但我想它追加的所有帖子沒有時間戳:

Event Title 
January 1, 2011 

Event Title 2 
January 2, 2011 

Event Title Nostamp 

Event Title Nostamp 2 

我怎麼會改變我的查詢得到這個工作?

編輯

對不起,我搞砸了我的原始查詢。我實際上需要他們按照升序排列,而非時間戳記帖子仍然在最下面。

回答

1

要包括行,而不在結果時間戳,從where條款移動meta_key = 'date_timestamp'on

LEFT JOIN 
     wp_z4azbl_postmeta 
ON  wp_z4azbl_posts.ID = wp_z4azbl_postmeta.post_id 
     and wp_z4azbl_postmeta.meta_key = 'date_timestamp' 

既然你整理descending,該null值將已經在底部出現。 null被視爲排序目的的最低可能值。

編輯:以不同的方式進行排序null,使用case

order by 
     case 
     when wp_z4azbl_postmeta.meta_value is null then 2 
     else 1 
     end 
,  wp_z4azbl_postmeta.meta_value 
+0

這個偉大的工程,但我搞砸了,我確實需要他們按升序排列,但仍需要那些沒有時間戳低於那些具有時間戳。這是一個簡單的修復? –

+1

@Josh艾倫:你可以使用一個'案例',例如添加回答 – Andomar

+0

你真是太棒了。按需要工作!非常感謝! –