【问题标题】:MySQL results from keywordsMySQL 结果来自关键字
【发布时间】:2023-06-05 22:10:02
【问题描述】:

我正在尝试在 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 中搜索所有具有 摄影风景的图片em> 作为关键字并列出它们。但理论上,一张图片可以有无限数量的与之相关的关键词。有什么想法吗?

【问题讨论】:

    标签: mysql sql database search keyword


    【解决方案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
    

    Sample SQL Fiddle

    【讨论】:

    • 太棒了,正是我想要的。非常感谢您的帮助!
    【解决方案2】:

    按图片分组,然后使用HAVING count = 2 或您搜索过多少标签。

    在此处查看 Toxi 架构

    http://tagging.pui.ch/post/37027745720/tags-database-schemas

    【讨论】: