PHP Query发布并添加未经检验的帖子结束

时间:2011-09-03 13:14:50

标签: php mysql sql wordpress

好的,所以通过Wordpress,我最终得到了以下的查询字符串:

"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 个答案:

答案 0 :(得分:1)

要在结果集中包含没有时间戳的行,请将meta_key = 'date_timestamp'子句从where子句移至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