You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL UNIX_TIMESTAMP查询异常求助:无法获取正确结果

搞定你的MySQL查询问题!

嘿,我太懂你卡一整天的感受了——wp_postmeta的键值对存储结构很容易在这里踩坑!你的核心问题出在试图用AND同时匹配同一行的两个不同meta_key,但wp_postmeta里每个文章的每个元字段都是单独的行,同一行不可能同时有_start_date_picker和_end_date_picker这两个键,所以你的查询永远找不到结果。

下面给你两种靠谱的解决方案,都是针对WordPress这种键值对表的常用写法:

方案1:自连接表(最直观)

通过自连接wp_postmeta,分别匹配两个日期字段,确保它们属于同一个post_id:

SELECT pm1.post_id
FROM wp_postmeta pm1
JOIN wp_postmeta pm2 ON pm1.post_id = pm2.post_id
WHERE
    -- 匹配开始日期 <= 目标日期
    pm1.meta_key = '_start_date_picker'
    AND pm1.meta_value <= '2018-05-01'
    -- 匹配结束日期 >= 目标日期
    AND pm2.meta_key = '_end_date_picker'
    AND pm2.meta_value >= '2018-05-01';

注:因为你的日期是标准YYYY-MM-DD格式,MySQL可以直接用字符串比较,不用转成时间戳,性能更好也更简洁。

方案2:GROUP BY + HAVING(适合多条件筛选)

如果之后还要加更多元字段筛选,这种方式更灵活:

SELECT post_id
FROM wp_postmeta
WHERE meta_key IN ('_start_date_picker', '_end_date_picker')
GROUP BY post_id
HAVING
    MAX(CASE WHEN meta_key = '_start_date_picker' THEN meta_value END) <= '2018-05-01'
    AND MIN(CASE WHEN meta_key = '_end_date_picker' THEN meta_value END) >= '2018-05-01';

进阶:获取完整文章信息

如果需要拿到事件的完整内容,可以关联wp_posts表:

SELECT p.*
FROM wp_posts p
JOIN wp_postmeta pm1 ON p.ID = pm1.post_id
JOIN wp_postmeta pm2 ON p.ID = pm2.post_id
WHERE
    p.post_type = 'event' -- 替换成你的事件自定义文章类型
    AND pm1.meta_key = '_start_date_picker'
    AND pm1.meta_value <= '2018-05-01'
    AND pm2.meta_key = '_end_date_picker'
    AND pm2.meta_value >= '2018-05-01';

内容的提问来源于stack exchange,提问作者Evgeny Malkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:46:06