나는 wordpress를위한 rss 피드를 만들고있다. 프로모션 날짜가 기사의 세트로되어 있거나, post_date를 사용한다면, promotion date로 주문해야한다. 그렇지 않다면 나는 up 다음 SQL로.SQL 왼쪽 join은 나에게 null 엔트리를주지 않는다.
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;
문제는 왼쪽 가입이 프로모션 날짜가없는 항목을 반환하지 않는 것 같습니다. 일반적으로 왼쪽 조인은 일치하는 항목이 없을 때 두 번째 항목에 대해 null 항목이있는 첫 번째 테이블의 모든 열을 선택합니다. 이 경우 왜 그렇게되지 않습니까?