如何使用JOIN关联wp_posts与wp_postmeta按_booking_start升序查询?
WooCommerce预订数据关联查询实现
关联逻辑说明
两个WordPress核心表的关联规则:
- 主表
wp_posts存储所有类型的内容条目,本次筛选post_type为wc_booking的预订记录,需要返回的核心字段为ID、post_parent - 关联表
wp_postmeta存储内容的扩展属性,本次需要匹配meta_key为_booking_start的预订开始时间属性,关联键为wp_posts.ID = wp_postmeta.post_id - 最终结果按预订开始时间升序排列
可直接运行的SQL语句
SELECT p.ID, p.post_parent, pm.meta_value AS booking_start FROM wp_posts p INNER JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = '_booking_start' WHERE p.post_type = 'wc_booking' ORDER BY pm.meta_value ASC;
补充说明
- 语句中给表设置了短别名
p、pm简化书写,不影响查询逻辑 - 将
meta_key的过滤条件写在JOIN ... ON子句中,比全量关联后再在WHERE中过滤执行效率更高 - 如果需要保留没有配置开始时间的预订记录,将
INNER JOIN替换为LEFT JOIN即可,无对应开始时间的记录booking_start字段会返回NULL,默认排序时会排在结果最前端
内容的提问来源于stack exchange,提问作者Ville
相关产品推荐
相关产品推荐

