Mysql 从日期范围中选择不同的列值
我创建了一个sqlfiddle,它概述了我要做的事情: 基本上,我需要在包含元信息的表中搜索唯一的帖子。在这个例子中,meta是一系列表示排除的日期(想想酒店的预订系统) 我传递一个开始和结束日期。我想查找不包含该范围内日期的post_id。我很接近,但还不太清楚Mysql 从日期范围中选择不同的列值,mysql,sql,Mysql,Sql,我创建了一个sqlfiddle,它概述了我要做的事情: 基本上,我需要在包含元信息的表中搜索唯一的帖子。在这个例子中,meta是一系列表示排除的日期(想想酒店的预订系统) 我传递一个开始和结束日期。我想查找不包含该范围内日期的post_id。我很接近,但还不太清楚 SELECT DISTINCT post_id FROM wp_facetwp_index WHERE facet_name = 'date_range' AND facet_value NOT BETWEEN '$start_d
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子句等)是基于记录应用的。每个记录都独立于其他记录进行评估 那么,自从
(1511,“日期范围”、“cf/排除日期”、“2015-07-31”、“2015-07-31”)
验证您的条件,返回511
由于post\u id
不是唯一的,因此您需要对集合进行排除,而不是现在对记录进行排除
这是解决方案(这里调整了fiddle:)
紧跟在之后的子查询存在(
是行的子集。它将根据连接i2.post\u id
=i1.post\u id
由NOT EXISTS
进行负面评估。
这是一个负交点
如果您需要标识的元组不是唯一的,则排除记录的工作将不起作用。我删除了wordpress标记并添加了SQL标记,因为此查询实际上是一个一般的SQL问题。非常感谢!我现在正在测试此问题。我将在确认此问题后尽快接受此答案。
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`
)