【发布时间】:2014-09-12 19:42:34
【问题描述】:
我正在为 wordpress 制作 rss 提要,如果文章设置了促销日期,则要求应按促销日期排序,否则使用 post_date 使用以下 SQL。
SELECT $wpdb->posts.* from $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON ($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
LEFT JOIN $wpdb->postmeta as m2 on ($wpdb->posts.ID=m2.post_id and m2.meta_key='promotion_date')
where now()>(CASE WHEN m2.meta_value IS NOT NULL
then cast(m2.meta_value as DATETIME)
ELSE $wpdb->posts.post_date END)
and $wpdb->posts.post_status='publish'
and $wpdb->posts.post_type='article'
and $wpdb->terms.slug = $slug
and $wpdb->term_taxonomy.taxonomy = 'article_$taxonomy'
order by CASE WHEN m2.meta_value IS NOT NULL
then cast(m2.meta_value as DATETIME)
ELSE $wpdb->posts.post_date
END DESC limit 100;
问题是左连接似乎不会返回没有促销日期的条目。当没有匹配项时,左连接通常会从第一个表中选择所有包含空条目的列。为什么在这种情况下没有发生?
【问题讨论】: