当前位置: 首页 > 知识库问答 >
问题:

如何确保结果至少包含一个ID?

爱乐邦
2023-03-14

下面的查询正在从关系表中收集内容ID。它是确保我的结果有至少2个关键字匹配。

我的问题是,我也有一个“硬关键字”(假设ID 127),这意味着我需要确保硬关键字是必须包含的。我想我需要修改我的having子句,但我不知道如何修改。

select * from `contents__keywords`
where `keyword_id` in (127, 162, 249, 567)
group by `content_id`
having count(distinct `keyword_id`) >= 2
order by `content_id`
desc
limit 4

共有2个答案

韶景曜
2023-03-14

虽然你得到了一个很好的解决方案,但由于我已经准备好了,我在这里分享。

架构:

 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

输出:

斜向文
2023-03-14

您可以添加一个条件条件:

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
 类似资料:
  • 我正在为这个Reddit编程练习编写一个基本密码生成器。我在Kotlin中有一个非常简单的密码生成,但我正在努力想出一个好方法来保证每个字符类型的特定最小数量(即,上限、下限、数字和特殊字符中至少各有2个)。 我可以很容易地分别做两次来启动密码,但我希望它们随机分布,而不是全部前置。我还想过将字符随机插入到字符数组中,而不是附加到字符串中,但我想知道是否有更好的方法。 以下是我目前拥有的内容: 它

  • 问题内容: 我正在尝试查看字符串是否至少包含数字或小写或大写。 我写了这样的东西: 但是我不明白为什么我不能使组合达到36。它们一直保持为0。我在做什么错? 问题答案: 您可以改用Pattern,我认为“ matches”方法会查找整个字符串以匹配正则表达式。 试试下面的代码:

  • 问题内容: 我想要这样一个验证,即“我的字符串”必须至少包含一个字母。 我正在使用以下内容: 即使在我的字符串中,标志也会给我 问题答案: 您想要的正则表达式是,但是您需要使用方法。 此页面将让您根据输入测试正则表达式。 正则表达式测试页 这里有一个Java正则表达式教程。 Java正则表达式教程

  • 问题内容: 我只想在我的姓名字段中输入字母作为输入。 我已经尝试过使用matchs方法,但是不幸的是出了点问题,并且抛出了异常。 还有其他检查方法吗? 问题答案: 您可以尝试使用此正则表达式

  • 我有一个<代码>列表 Java8似乎提供了一种通过流来实现的方法。更基本的方法呢? 谢谢