繁体   English   中英

无法排序MySQL查询

[英]Trouble sorting a MySQL query

我有一个查询...

SELECT p.* 
FROM   wp_posts p 
       JOIN wp_postmeta pm 
         ON pm.post_id = p.ID 
       JOIN wp_postmeta pmd 
         ON pmd.post_id = p.ID 
WHERE  p.post_type = 'event' 
       AND p.post_status = 'publish' 
       AND ( pm.meta_key = 'post_city_id' 
             AND ( pm.meta_value = '1' ) ) 
       AND ( pmd.meta_key = 'end_date' 
             AND pmd.meta_value >= '2012-05-27' ) 
ORDER  BY p.post_date ASC, 
          p.post_title ASC 
LIMIT  5 

end_date和end_time是为元键分配了与特定帖子不再在网站上显示的日期(Ymd格式)和时间等效的值。 所以我想用pmd.meta_key ='end_date'asc,pmd.meta_key ='end_time'asc这样的东西来更改p.post_date asc,但是我不确定最好的方法。 有什么想法吗?

无法从问题中100%地确定要排序的依据,但是如果要链接(然后按排序)来自同一表的两个值,可以执行以下操作:

SELECT p.*
FROM wp_posts p  
  JOIN wp_postmeta pm ON pm.post_id=p.ID AND pm.meta_key='post_city_id' AND pm.meta_value='1' 
  JOIN wp_postmeta pmd ON pmd.post_id=p.ID AND pmd.meta_key='end_date' AND pmd.meta_value>='2012-05-27'
  JOIN wp_postmeta pmt ON pmt.post_id=p.ID AND pmt.meta_key='end_time'
WHERE p.post_type='event' and p.post_status='publish'  
ORDER BY pmd.meta_value, pmt.meta_value
LIMIT 5 

这将为您提供按键=“ end_date”的postmeta值排序的结果,按键=“ end_time”的postmeta的结果排序

(我还将“ WHERE”移到了JOIN中,因为这样可以使阅读更加清晰。不是必需的,但是对于读取/调试更好,并且结果相同。)

暂无
暂无

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

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