我已经有一段时间没有做过任何 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' 和 'image_002.jpg'。
===输入===
用户选择的标签:( '蓝色' , '风景' )
===输出===
具有所有列出的标签的 image_names: ( 'image_001.jpg' , 'image_002.jpg' )
提前致谢。