我有一个查询...
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 值排序的结果,其中键 = "end_date",由键 = "end_time" 的后元排序
(我还将"WHERE"移到了 JOIN 中,因为这更易于阅读。不是必需的,但更适合读取/调试,并且结果相同。