这是我之前问的question的延续。
我正在尝试在WordPress数据库上使用原始sql
实现一个解决方案
当我运行如下所示的查询时
SELECT *
FROM wp_postmeta
WHERE post_id IN
(SELECT ID
FROM wp_posts
WHERE post_type = 'promotions'
AND post_status = 'publish')
AND meta_key IN ('promo_start_date',
'promo_end_date')
我得到以下结果
+---------+---------+------------------+------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+------------------+------------+
| 6199874 | 54679 | promo_end_date | 2023-01-01 |
| 6199876 | 87246 | promo_end_date | 2023-01-02 |
| 6199878 | 87251 | promo_end_date | 2023-01-03 |
| 6199880 | 87255 | promo_end_date | 2023-01-04 |
| 6199882 | 87257 | promo_end_date | 2023-01-05 |
| 6199873 | 54679 | promo_start_date | 2022-12-14 |
| 6199875 | 87246 | promo_start_date | 2022-12-15 |
| 6199877 | 87251 | promo_start_date | 2022-12-16 |
| 6199879 | 87255 | promo_start_date | 2022-12-17 |
| 6199881 | 87257 | promo_start_date | 2022-12-18 |
+---------+---------+------------------+------------+
但是当我运行以下命令时
SELECT *
FROM wp_postmeta
WHERE post_id IN
(SELECT ID
FROM wp_posts
WHERE post_type = 'promotions'
AND post_status = 'publish')
AND (meta_key = 'promo_start_date'
AND CURRENT_DATE >= CAST(meta_value AS DATE))
AND (meta_key = 'promo_end_date'
AND CURRENT_DATE <= CAST(meta_value AS DATE))
得到一个空结果集
Empty set (0.00 sec)
是否有一种方法可以改进无结果查询,以获得反映以下代码片段所指示内容的结果
current_date >= promo_start_date AND current_date <= promo_end_date
1条答案
按热度按时间egmofgnx1#
WHERE子句一次只作用于一行。根据定义,
meta_key
在给定行上只能有一个值。同一行上不能同时为'promo_start_date'
和'promo_end_date'
。因此,检查meta_key
是否等于一个值以及meta_key
是否等于另一个值将始终为false。你需要做的是检查
meta_key
是否等于一个字符串或另一个字符串,你可以根据它的值与其他条件合并。编写相同逻辑的另一种方法: