@daMage

Какой запрос составить для выборки изображений из базы по заданым фильтрам?

Здравствуйте. Есть таблица с изображениями. В ней название, размер изображения т.д. На сайте можно выбрать фильтр по цвету, ключевому слову и ориентации. Если с ориентацией всё понятно т.к. width и height лежат в той же таблице, то с ключевыми словами или цветом не всё так просто. Они вынесены в отдельные таблицы и имеют вид keyword, image_id и color, image_id. Как составить запрос на выборку изображений, которые имеют определенное ключевое слово или цвет? Проблем бы не было, если бы каждому изображению отвечал один цвет или ключевое слово, но их множество, отчего и были вынесены в отдельные таблицы. Желательно не посылать на нереляционные субд - времени маловато изучать что-то новое.
  • Вопрос задан
  • 220 просмотров
Решения вопроса 1
valerium
@valerium
Изобретая велосипед
По сути, что цвет, что ключевое слово - это всё тэги, то есть вполне уместно использовать связь многие-ко-многим. То есть отдельная таблица с изображениями, отдельная таблица с цветами, отдельная с ключевыми словами. И две таблицы для связей, одна связывает цвета с изображениями, другая ключевые слова с изображениями. Таким образом можно делать очень сложные выборки.

SELECT * FROM `images` WHERE
    `images`.`id` = `keyword-to-image`.`image_id` AND
    `images`.`id` = `colors-to-image`.`image_id` AND
    `keyword-to-image`.`keyword_id` = 234 AND
    `colors-to-image`.`color_id` = 345 AND
    `colors-to-image`.`color_id` <> 543;


То есть мы получим все изображения, к которым привязано ключевое слово с id 234 и цвет с id 345, но при этом не привязан цвет с id 543. Количество этих AND можно легко менять в скрипте. Кроме того, сравнение целых чисел намного быстрее сравнения строк.

Правда, это потребует перестройки всей базы данных, но только один раз, достаточно написать скрипт.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы