2011-09-03 30 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

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