【发布时间】:2013-02-04 09:09:49
【问题描述】:
我已经有一段时间没有做任何 SQL 了,我不确定这个问题是否有一个简单的解决方案。我也是一个菜鸟。
我正在尝试建立一个图片库,允许用户使用标签来搜索图片,然后单击其他标签来优化搜索并减少结果数量,但我对查询有很大的问题参与。
这是我当前数据库结构的简化版本:
(2个表和一个额外的多对多链接表)
CREATE TABLE images(
image_id INT(12) AUTO_INCREMENT,
image_name VARCHAR(128),
PRIMARY KEY(image_id)
)ENGINE= INNODB;
CREATE TABLE tags(
tag_name VARCHAR(64) NOT NULL,
PRIMARY KEY(tag_name)
)ENGINE= INNODB;
CREATE TABLE images_tags_link(
image_id_fk INT(12),
tag_name_fk VARCHAR(64) NOT NULL,
PRIMARY KEY(image_id_fk,tag_name_fk),
FOREIGN KEY(image_id_fk) REFERENCES images(image_id),
FOREIGN KEY(tag_name_fk) REFERENCES tags(tag_name)
)ENGINE= INNODB;
样本数据:
===images===
___________________________
| image_id | image_name |
|----------|----------------|
| 1 | image_001.jpg |
| 2 | image_002.jpg |
| 3 | image_003.png |
| 4 | image_004.jpg |
| 5 | image_005.gif |
---------------------------
===tags===
_______________
| tag_name |
|---------------|
| Landscape |
| Portrait |
| Illustration |
| Photo |
| Red |
| Blue |
| Character |
| Structure |
---------------
===images_tags_link===
________________________________
| image_id_fk | tag_name_ fk |
|-------------|------------------|
| 1 | Landscape |
| 1 | Illustration |
| 1 | Blue |
| 2 | Blue |
| 2 | structure |
| 2 | Landscape |
| 3 | Illustration |
| 4 | Red |
| 4 | Portrait |
| 4 | Character |
| 5 | Blue |
| 5 | Photo |
--------------------------------
我的问题在于以下查询:
我正在寻找一个查询,它可以从 IMAGES 表中选择所有包含所有用户列出的标签的“image_names”,例如,用户可以搜索“Blue”和“Landscape”标签,它应该只输出image_names 'image_001.jpg' AND 'image_002.jpg'。
===输入===
用户选择的标签:( 'Blue' , 'Landscape' )
===输出===
具有所有列出标签的图像名称:('image_001.jpg','image_002.jpg')
提前致谢。
【问题讨论】:
标签: mysql sql many-to-many subquery