gpt4 book ai didi

mysql - 什么 MySQL 查询可以返回满足所有条件的结果集,例如返回具有这些 'x' 关键字的所有照片?

转载 作者:行者123 更新时间:2023-11-29 06:52:26 24 4
gpt4 key购买 nike

我有 3 个表:

照片:身份证、姓名

关键字:id, keyword

photo_keyword关系表:photo_id,keyword_id

换句话说,一张照片可能与描述照片的多个关键字相关联

photos:
id | name
1 | photo 1
2 | photo 2
3 | photo 3

keywords:
id | keyword
1 | NHL
2 | Toronto
3 | Montreal
4 | Boston
5 | Chicago
6 | Canadiens
7 | Leafs


photo_keyword:
photo_id | keyword_id
1 | 2
1 | 7
1 | 1
2 | 1
2 | 3
2 | 6
3 | 2
3 | 7

我想动态地编写/构建一个查询,在其中我可以获得满足所有要求条件的照片列表。

示例:我想要所有以 Toronto (2) 和 Leafs (7) 作为关键字的照片

即)我想检索照片 1 和照片 3,因为它们具有两个关键字

如果我要求提供以 NHL (1) Toronto (2) 和 Leafs (7) 作为条件的照片,则只会返回照片 1。

显而易见的第一次尝试涉及连接表格:

SELECT photo.id, photo.name
FROM photo
LEFT JOIN photo_keyword ON photo_keyword.photo_id = photo.id
LEFT JOIN keyword ON keyword.id = photo_keyword.keyword_id
WHERE keyword.keyword = 'Toronto'

返回照片 1 和 2

每当我搜索满足 1 个关键字条件的所有照片时,都可以使用这种类型的查询。然而,尝试获取满足两个关键字条件的照片是另一回事。

我试过了

 WHERE keyword.keyword IN ('NHL, 'Toronto', 'Leafs') 

但这会返回满足其中一个条件但不一定同时满足两个条件的照片。在这种情况下,照片 1 和 2 也是如此。

那么如何构建一个只返回满足所有关键字条件的照片的查询?

如有任何帮助,我们将不胜感激!

更新:

根据大家的评论,这就是我放在一起的内容,似乎可以满足我的要求:

SELECT
photos.id
FROM photos
LEFT JOIN photo_keyword pk ON pk.photo_id = photos.id
LEFT JOIN keywords kw ON kw.id = pk.keyword_id
WHERE kw.keyword IN ('NHL', 'Toronto', 'Leafs')
GROUP BY photos.id
HAVING COUNT(kw.keyword) = 3;

最佳答案

如果您知道给定照片的关键字不能重复,我认为您可以通过以下方式实现这一点:

SELECT photo.name from photo where photo.id IN (
SELECT photo.id
FROM photo
LEFT JOIN photo_keyword ON photo_keyword.photo_id = photo.id
LEFT JOIN keyword ON keyword.id = photo_keyword.keyword_id
WHERE keyword.keyword IN ('NHL, 'Toronto', 'Leafs')
GROUP BY (photo.id)
HAVING COUNT (photo.name) = *Number of passed keywords*)

也可以使用 UNIONS 等来执行此操作,但这在很大程度上取决于您对关键字的了解以及获取关键字的方式。

关于mysql - 什么 MySQL 查询可以返回满足所有条件的结果集,例如返回具有这些 'x' 关键字的所有照片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14596507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com