麻烦排序MySQL查询

时间:2012-05-28 03:30:16

标签: php mysql wordpress

我有个问题......

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是指定了与日期等效的值的元键(以Y-m-d格式表示)以及特定帖子不应再在网站上显示的时间。所以我想用pmd.meta_key ='end_date'asc,pmd.meta_key ='end_time'asc之类的东西来改变p.post_date asc,但我不确定最好的方法。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不是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 

这将为您提供按postmeta值排序的结果,其中key =“end_date”,后面是key =“end_time”的postmeta

(我还将“WHERE”移动到JOIN中,因为这样可以更清晰地阅读。不需要,但读取/调试更好,结果相同。)