我试图在MySQL中构建一个简单的搜索功能,用户可以通过输入一个或多个预定义的关键字来过滤图像。但是,每当我添加多个关键字时,我都无法获得正确的输出。
这是数据库结构的简化版本:
Table: images
- id (PK)
- title
- link
Table: keywords
- id (PK)
- keyword
Table: image_keywords
- image_id (FK)
- keyword_id (FK)
数据示例:
images:
1. Image 1 title http://test1.com
2. Image 2 title http://test2.com
3. Image 3 title http://test3.com
keywords:
1. Photography
2. Landscape
3. Skyline
image_keywords:
1. 1.
1. 2.
2. 1.
2. 3.
所以我想要的是能够搜索 image_keywords 以查找 摄影和景观的所有图片作为关键字并列出它们。但是在图像中,图像可以包含无限量的关键词。有什么想法吗?
答案 0 :(得分:1)
我认为这可能是你想要的:
select i.id, i.title
from images i
inner join image_keywords ik on i.id = ik.image_id
inner join keywords k on ik.keyword_id = k.id
where k.keyword in ('Photography', 'Landscape')
group by i.id, i.title
having count(distinct k.id) = 2
答案 1 :(得分:0)
逐个图像地使用组,然后使用HAVING count = 2
或您搜索的标签数量。
在这里看看Toxi Schema
http://tagging.pui.ch/post/37027745720/tags-database-schemas