Php WordPress手动根据postmeta列值选择MySQL
我正在为我的WordPress项目构建一个定制PHP页面。我的项目是关于事件信息的。所以我创建了一个页面,根据日期范围搜索事件 事件表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
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返回一个空结果集