繁体   English   中英

如何通过左连接结果排序SQL查询

[英]How to Order an SQL Query by Left Join Result

我有一个左连接的SQL查询,工作得很好。 但是,我在订购结果时遇到了困难。

查询如下所示:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT OUTER JOIN wp_posts recent ON recent.post_parent = wp_posts.ID AND recent.post_type = 'ticket_reply' AND recent.post_author = wp_posts.post_author WHERE 1=1 AND ( ( wp_postmeta.meta_key = '_wpas_status' AND CAST(wp_postmeta.meta_value AS CHAR) = 'open' ) ) AND wp_posts.post_type = 'ticket' GROUP BY wp_posts.ID ORDER BY CASE WHEN recent.post_parent IS NULL THEN 0 ELSE 1 END, recent.post_date DESC, wp_posts.post_date DESC LIMIT 0, 20

查询工作正常,并按日期正确排序。

但是,最后显示不在交集中的条目(即,没有ticket_reply子项的ticket_reply ticket类型的帖子)。 我需要首先显示那些,然后按原始查询中显示的日期显示其余部分。

我不确定这个请求是否足够清楚。 如果没有,请告诉我需要澄清的内容,我会尽力澄清。

尝试这个:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID 
FROM wp_posts 
LEFT OUTER JOIN wp_posts recent 
   ON recent.post_parent = wp_posts.ID AND 
      recent.post_type = 'ticket_reply' AND 
      recent.post_author = wp_posts.post_author 
WHERE 1=1 AND wp_posts.post_type = 'ticket' 
GROUP BY wp_posts.ID 
ORDER BY CASE WHEN recent.post_parent IS NULL THEN 0 ELSE 1 END,
         recent.post_date ASC, 
         wp_posts.post_date DESC 
LIMIT 0, 20

此谓词recent.post_parent IS NULL标识不匹配的记录。 CASE表达式为这些记录返回0值,为其余记录返回1 因此,这种方式首先显示不匹配的记录,然后显示其余记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM