多标记包含的SQL查询

多标记包含的SQL查询,sql,mysql,tags,Sql,Mysql,Tags,我能很好地解释这一点。但我尽了最大努力: 我为人们制作了一个标签工具。有些人包含超过1个标记,我需要得到这些标记,但不知道如何编写多标记包含的SQL查询 我知道你不能在这样的条件下写: 下(people_tags.tag_id)=“外部”和 下部(People_tags.tag_id)=“summer” 因为每个人的结果都在他自己的一排,“外面”和“夏天”不会在同一排。因此,使用此查询不会得到任何结果 这是整个查询: 选择不同的人。*,tags.tag FROM people 在people\u

我能很好地解释这一点。但我尽了最大努力:

我为人们制作了一个标签工具。有些人包含超过1个标记,我需要得到这些标记,但不知道如何编写多标记包含的SQL查询

我知道你不能在这样的条件下写:
下(people_tags.tag_id)=“外部”和
下部(People_tags.tag_id)=“summer”

因为每个人的结果都在他自己的一排,“外面”和“夏天”不会在同一排。因此,使用此查询不会得到任何结果

这是整个查询:
选择不同的人。*,tags.tag FROM people
在people\u标签上加入people\u标签。people\u id=people.id
在tags.tag=people\u tags.tag\u id和
下(people_tags.tag_id)=“外部”和
下部(People_tags.tag_id)=“summer”

那么如何编写多标记SQL条件呢?有人知道吗?

对不起,我的英语不好:)

你需要使用
而不是
。现在,您的思维过程是这样的:“我需要获取关键字为'outside'的行,以及关键字为'summer'的行,因此我需要使用
”。但在RDBMS看来,如果关键字是“室内”或“夏季”,您希望返回给定的行。。。因此,您实际需要的是
,而不是

编辑:

我知道你现在想做什么了。对不起,之前没有仔细阅读

试试这个(可能有一种更有效/可扩展的方法,但应该可以)

编辑2:

假设tag_id和people_id的组合是people_标签的唯一键,那么以下操作也将起作用:

SELECT
    people.*,
    COUNT(*) AS Co
FROM
    people
    JOIN peoples_tags ON people.id = peoples_tags.people_id
WHERE
    peoples_tags.tag_id = 'outside' OR
    peoples_tags.tag_id = 'summer'
GROUP BY
    people.id
HAVING
    Co = 2

我明白你的意思。在某些情况下这是正确的,但我正在开发一个基于过滤的facated搜索工具。但是thx对于Insights来说,这似乎不适用于博士后。还是我遗漏了什么?伟大的对于越来越多的标签列表,最好是将people_tags.tag_id放入('outside','summer')中
SELECT
    people.*,
    COUNT(*) AS Co
FROM
    people
    JOIN peoples_tags ON people.id = peoples_tags.people_id
WHERE
    peoples_tags.tag_id = 'outside' OR
    peoples_tags.tag_id = 'summer'
GROUP BY
    people.id
HAVING
    Co = 2