我正在为我的WordPress项目构建一个自定义PHP页面。我的项目是关于活动信息。所以我正在创建一个页面来根据日期范围搜索事件。
事件表
post_id | title |
25 | Marathon Run |
postmeta table
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语句来过滤这种结构的日期范围?谢谢
答案 0 :(得分:0)
看起来你需要加入事件表(在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)