检查Mysql查询中是否有3个不同日期范围的值
我有一个表检查Mysql查询中是否有3个不同日期范围的值,mysql,sql,date,subquery,Mysql,Sql,Date,Subquery,我有一个表wp\u posts,其中包含post\u date和author\u id列 我需要从wp\u posts中找到author\u id,其中有(全部)3个时间范围的帖子: wp_posts.post_date BETWEEN '2012-11-05 00:00:00' AND '2012-11-10 23:59:59' wp_posts.post_date BETWEEN '2012-11-12 00:00:00' AND '2012-11-17 23:59:59' wp_posts
wp\u posts
,其中包含post\u date
和author\u id
列
我需要从wp\u posts
中找到author\u id
,其中有(全部)3个时间范围的帖子:
wp_posts.post_date BETWEEN '2012-11-05 00:00:00' AND '2012-11-10 23:59:59'
wp_posts.post_date BETWEEN '2012-11-12 00:00:00' AND '2012-11-17 23:59:59'
wp_posts.post_date BETWEEN '2012-11-19 00:00:00' AND '2012-11-25 23:59:59'
看起来很简单,但我搞不懂。
如果我在每个日期范围之间放置AND,将始终返回0
有什么想法吗?试试这个:
SELECT author_ID
FROM posts
WHERE (wp_posts.post_date BETWEEN '2012-11-05 00:00:00' AND '2012-11-10 23:59:59') OR
(wp_posts.post_date BETWEEN '2012-11-12 00:00:00' AND '2012-11-17 23:59:59') OR
(wp_posts.post_date BETWEEN '2012-11-19 00:00:00' AND '2012-11-25 23:59:59')
GROUP BY author_ID
HAVING COUNT(*) = 3
(wp_posts.post_date BETWEEN '2012-11-05 00:00:00' AND '2012-11-10 23:59:59') or
(wp_posts.post_date BETWEEN '2012-11-12 00:00:00' AND '2012-11-17 23:59:59') or
(wp_posts.post_date BETWEEN '2012-11-19 00:00:00' AND '2012-11-25 23:59:59')
你为什么不放上或:
(wp_posts.post_date BETWEEN '2012-11-05 00:00:00' AND '2012-11-10 23:59:59') OR
(wp_posts.post_date BETWEEN '2012-11-12 00:00:00' AND '2012-11-17 23:59:59') OR
(wp_posts.post_date BETWEEN '2012-11-19 00:00:00' AND '2012-11-25 23:59:59')
编辑:
这就是你需要的吗?Hello@SubRed。实际上,a需要按作者id分组的帖子,这与所有3个日期范围相匹配。如果我发现一个作者id在1个日期范围内有帖子,我需要忽略他,如果在2个日期范围内也一样。我只需要当作者id在所有3个日期范围内都有帖子时才需要。
SELECT author_id FROM wp_posts
WHERE author_id IN (
SELECT author_id FROM wp_posts WHERE post_date BETWEEN '2012-11-05 00:00:00' AND '2012-11-10 23:59:59'
) AND author_id IN (
SELECT author_id FROM wp_posts WHERE post_date BETWEEN '2012-11-12 00:00:00' AND '2012-11-17 23:59:59'
) AND author_id IN (
SELECT author_id FROM wp_posts WHERE post_date BETWEEN '2012-11-19 00:00:00' AND '2012-11-25 23:59:59'
)