我正在为我的WordPress项目构建一个自定义PHP页面。我的项目是有关事件的信息。因此,我正在创建一个页面以根据日期范围搜索事件。

事件表

post_id  | title        |
25       | Marathon Run |


后元数据表

meta_id | post_id | meta_key  | meta_value
1       | 25      | StartDate | 2016-12-25 00:00
2       | 25      | EndDate   | 2016-12-26 00:00


WordPress如上表所示以复杂的方式存储数据。 “ StartDate”和“ EndDate”作为值存储在meta_key列中,而“ StartDate”和“ EndDate”的实际值存储在meta_value列中。

我发现很难像我经常处理的通常结构那样进行过滤:

SELECT * FROM events WHERE startdate <= $startdate AND enddate >= $enddate


如何编写MySQL语句来过滤这种结构的日期范围?谢谢

最佳答案

看来您需要加入事件表(在post_id上),然后对meta_key进行过滤(对于StartDate和EndDate),然后检查它是否在正确的范围内。

见下文;

SELECT * FROM events JOIN postmeta ON events.post_id = postmeta.post_id WHERE (meta_key = 'StartDate' AND meta_value <= $startdate) AND (meta_key = 'EndDate' AND meta_value >= $enddate)

关于php - 基于postmeta列值的WordPress手册SELECT MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41297943/

10-13 02:31