自从我执行任何 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 表中选择所有“图像名称”的单个查询,例如,用户可以搜索应该只输出图像名称“图像_001”的“蓝色”和“风景”标签.jpg'和'image_002.jpg'。
===输入===
用户选择的标签:('蓝色','风景')
===输出===
具有所有列出的标签的图像名称:('image_001.jpg','image_002.jpg')
提前致谢。