Php WordPress手动根据postmeta列值选择MySQL

Php WordPress手动根据postmeta列值选择MySQL,php,mysql,wordpress,Php,Mysql,Wordpress,我正在为我的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 | 2

我正在为我的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_键
列中,“StartDate”和“EndDate”的实际值存储在
meta_键
列中

我发现很难像我经常使用的结构一样进行过滤,例如:

SELECT * FROM events WHERE startdate <= $startdate AND enddate >= $enddate
从startdate=$enddate的事件中选择*

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

看起来你需要加入事件表(在post_id上),然后过滤meta_键(用于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)
SELECT*FROM events JOIN postmeta ON events.post_id=postmeta.post_id其中(meta_key='StartDate'和meta_value=$enddate)

看起来您需要在事件表(post_id)上加入,然后过滤meta_键(用于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)
SELECT*FROM events JOIN postmeta ON events.post_id=postmeta.post_id其中(meta_key='StartDate'和meta_value=$enddate)

meta_键位于Posteta表中,而事件位于另一个表中。请为您提到的每个表提供架构示例。请注意,我添加了一个join语句,以便您可以选择事件,postmeta dataNope MySQL返回的结果为空,setmeta_键位于postmeta表中,而事件位于另一个表中。请为您提到的每个表提供架构示例,我添加了一个join语句,这样您就可以选择事件,Posteta dataNope MySQL返回一个空结果集