Mysql 如何确保结果至少包含一个ID?
以下查询正在从关系表收集内容ID。它确保我的结果至少有2个关键字匹配 我的问题是我还有一个“硬关键字”(比如ID127),这意味着我需要确保硬关键字是必须包含的。我想我需要修改我的Mysql 如何确保结果至少包含一个ID?,mysql,sql,having,Mysql,Sql,Having,以下查询正在从关系表收集内容ID。它确保我的结果至少有2个关键字匹配 我的问题是我还有一个“硬关键字”(比如ID127),这意味着我需要确保硬关键字是必须包含的。我想我需要修改我的having子句,但我不知道如何修改 从“内容”关键字中选择*` 其中,`keyword_id`in(127162249567) 按“内容”id分组` 具有计数(不同的'keyword_id`)>=2 按“内容”排序` 描述 限制4 您可以添加条件条件: having count(distinct `keyword_i
having
子句,但我不知道如何修改
从“内容”关键字中选择*`
其中,`keyword_id`in(127162249567)
按“内容”id分组`
具有计数(不同的'keyword_id`)>=2
按“内容”排序`
描述
限制4
您可以添加条件条件:
having count(distinct `keyword_id`) >= 2 and
sum(case when keyword_id = 127 then 1 else 0 end) > 0
如果您使用的是MySQL(如背景标记所示),则可以使用快捷方式:
having count(distinct `keyword_id`) >= 2 and
sum( keyword_id = 127 ) > 0
虽然你有一个很好的解决方案,但既然我已经准备好了,我在这里分享 模式:
create table contents__keywords (content_id int ,keyword_id int);
insert into contents__keywords values(100,127);
insert into contents__keywords values(100,162);
insert into contents__keywords values(101,249);
insert into contents__keywords values(102,127);
查询:
select content_id,count(distinct keyword_id) keyword_id_count,sum(case when keyword_id=127 then 1 else 0 end)keyword_id102_count
from contents__keywords
where keyword_id in (127, 162, 249, 567)
group by content_id
having count(distinct keyword_id)>= 2 or keyword_id102_count>=1
order by content_id
desc
limit 4
输出:
内容标识
关键字\u id\u计数
关键字\u id102\u计数
102
1.
1.
100
2.
1.
用您正在使用的数据库标记您的问题。请注意,您的
GROUP BY
子句和SELECT
列表不一致,应导致错误。我想你只是简单地简化了问题的查询。谢谢你,sum
,当然。。。Idk我的思想所在。不,我实际上需要和。看起来到目前为止一切都很好,从我的桌子上得到了我想要的结果。非常抱歉我的误解。我完全搞错了。