2014-10-17 3 views
0

Я пытаюсь создать простую функцию поиска в MySQL, где пользователь может фильтровать изображения, введя одно или несколько предопределенных ключевых слов. Но я не могу получить правильный вывод, когда добавляю более одного ключевого слова.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 для всех изображений, имеющих обаФотографии и Пейзаж как ключевое слово и укажите их. Но в теории изображение может иметь неограниченное количество ключевых слов, с которыми оно связано. Есть предположения?

ответ

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

+1

Awesome, именно то, что я искал. Большое спасибо за помощь! –

Смежные вопросы