UNIX_TIMESTAMP MYSQL,无法正确查询

时间:2018-04-30 15:46:27

标签: mysql wordpress

有人可以查看此查询,我整天都在敲墙。 在我的数据库中,我发现了带有字段的事件" _start_date_picker"等于"
2018年4月30日"和" _end_date_picker"等于" 2018-05-03"

我试图获得" post_id"这个选择日期到这个区间

SELECT * FROM wp_postmeta
WHERE (wp_postmeta.meta_key='_start_date_picker' AND 
UNIX_TIMESTAMP(STR_TO_DATE(wp_postmeta.meta_value, "%Y-%m-%d")) <= 
UNIX_TIMESTAMP(STR_TO_DATE('2018-05-01', "%Y-%m-%d"))) AND 
(wp_postmeta.meta_key='_end_date_picker'
AND UNIX_TIMESTAMP(STR_TO_DATE(wp_postmeta.meta_value, "%Y-%m-%d")) >= 
UNIX_TIMESTAMP(STR_TO_DATE('2018-05-01', "%Y-%m-%d")))

什么都没有...

顺便说一句,有没有人知道如何在比较之前转换元值?woocommerce_product_query&#39;钩

    $meta_query= array(
    'relation' => 'OR',
        array(
            'key' => '_start_date_picker',
            'value' => $_REQUEST['event_start_date'],
            'compare' => '>=',
            'type' => 'DATE'
        ),
        array(
            'key' => '_end_date_picker',
            'value' => $_REQUEST['event_start_date'],
            'compare' => '<=',
            'type' => 'DATE'
        )
    );

我试图通过$ _REQUEST值中的此事件字段来过滤我的事件..有人可以帮忙......?

2 个答案:

答案 0 :(得分:1)

从wordpress的内存中,表格中的2个日期分为2个不同的行。

因此,您需要一个将表连接到自身的查询,以获取匹配的行。

SELECT * 
FROM wp_postmeta a
INNER JOIN wp_postmeta b
ON a.meta_key = '_start_date_picker'
AND b.meta_key = '_end_date_picker'
WHERE UNIX_TIMESTAMP(STR_TO_DATE(a.meta_value, "%Y-%m-%d")) <= 
UNIX_TIMESTAMP(STR_TO_DATE('2018-05-01', "%Y-%m-%d"))) 
AND UNIX_TIMESTAMP(STR_TO_DATE(b.meta_value, "%Y-%m-%d")) >= 
UNIX_TIMESTAMP(STR_TO_DATE('2018-05-01', "%Y-%m-%d")))

答案 1 :(得分:1)

我可以保证没有满足这两个条件的行:

      meta_key='_start_date_picker' 
  AND meta_key='_end_date_picker'

想一想。如果其中一个条件的计算结果为TRUE,则另一个条件将评估为FALSE。

我们需要两个对wp_postmeta表的引用。

  FROM wp_postmeta sdp 
  JOIN wp_postmeta edp
    ON edp.post_id = sdp.post_id
 WHERE ( sdp.meta_key = '_start_date_picker' )
   AND ( sdp.meta_value conditions )
   AND ( edp.meta_key = '_end_date_picker' )
   AND ( edp.meta_value conditions )