gpt4 book ai didi

mysql - 从日期范围中选择不同的列值

转载 作者:行者123 更新时间:2023-11-28 23:56:13 24 4
gpt4 key购买 nike

我创建了一个 sqlfiddle 概述了我正在尝试做的事情:

http://sqlfiddle.com/#!9/41f3c/2

基本上,我需要在包含元信息的表中搜索独特的帖子。本例中的元数据是一系列代表排除项的日期(想想酒店的预订系统)。

我传入开始日期和结束日期。我想找到不包含该范围内的日期的 post_id。我很接近,但不太明白。

SELECT DISTINCT post_id 
FROM wp_facetwp_index
WHERE facet_name = 'date_range'
AND facet_value NOT BETWEEN '$start_date' AND '$end_date'

如果表中唯一排除的日期在范围内,则此方法有效,但如果某些日期超出范围,我仍会得到 post_id。

感谢您的关注。

最佳答案

不要忘记,在 SQL 中,过滤器(where 子句等)是基于 RECORD 应用的。每条记录都独立于其他记录进行评估。

所以,因为

(1, 511, 'date_range', 'cf/excluded_dates', '2015-07-31', '2015-07-31')

验证您的条件,返回 511

由于 post_id 不是唯一的,您需要继续排除 SETS,而不是您现在正在执行的排除 RECORDS。

这是解决方案(这里调整了 fiddle :http://sqlfiddle.com/#!9/41f3c/7)

SELECT DISTINCT i1.`post_id` 
FROM `wp_facetwp_index` i1
WHERE i1.`facet_name` = 'date_range'
AND NOT EXISTS (
SELECT 1
FROM `wp_facetwp_index` i2
WHERE
i2.`facet_value` BETWEEN '$start_date' AND '$end_date'
AND i2.`facet_name` = 'date_range'
AND i2.`post_id` = i1.`post_id`
)

EXISTS ( 之后的子查询是行的子集。它会被NOT EXISTS 基于结i2.post_id = i1.post_id。这是一个负交集。

如果您需要识别的元组不是唯一的,则排除记录不起作用。

关于mysql - 从日期范围中选择不同的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31599646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com