php - MySQL 查询排序问题

标签 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 ,但我不确定最好的方法。有什么想法吗?

最佳答案

从问题中不能 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”,然后是 postmeta,其中 key =“end_time”

(我还将“WHERE”移动到 JOIN 中,因为这样可以更清晰地阅读。不是必需的,但更适合阅读/调试,并且结果相同。)

关于php - MySQL 查询排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10779041/

相关文章:

php - 一次提交插入多行时如何查出数据库中是否存在行

mysql - 如何在 MySQL 中搜索 1,2,3,4,5 等字符串时获得正确的结果

php - MYSQL INSERT INTO 不插入数据或抛出错误

php - 在 Nginx 上安装 wordpress - Nginx 发送 install.php

php - 与我的菜单作斗争 - 为什么这个坏了? - <li> php 被打印出来,没有被执行?

php - 删除字符串后的字符?

php - 单例继承

mysql - postgresql 中的 DATE_FORMAT

php - WordPress 在循环外获取页面 ID

php - 将 mysql_query 转换为 $wpdb->get_results