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'。
===入力===
ユーザーが選択したタグ:('青'、'風景')
===出力===
リストされているすべてのタグを持つimage_names:('image_001.jpg'、'image_002.jpg')
前もって感謝します。