Доброго времени суток!
Пишу на PHP интернет-магазин, сейчас делаю фильтры для товаров. Допустим, заходите вы в салон Toyota и говорите "покажите мне белый Highlander". И вам показывают модель Highlander именно белого цвета.
В таблице с товарами есть ячейка filters, её содержимое - перечисление id фильтров через запятую. Допустим, для варианта "белый" соответствует id 1, а для "highlander" - 2. У белого хайлендера в filters будет написано "1,2". При этом, может быть и что-то вроде "1,2,3,4,5,6,7" - кто знает сколько разных фильтров будет у товара.
запрос к БД выглядит так:
$filters="[[:<:]]1[[:>:]] | [[:<:]]2[[:>:]]"; //пробелы для визуального разграничения - сливается
$query="SELECT * FROM table WHERE filters REGEXP '$filters'";
Этот запрос выводит все товары, которые имеют 1 в списке и все с 2 в списке. То есть, нам показываются все машины белого цвета и хайлендеры всех цветов.
Модернизация запроса до:
$filter=array(0 => "[[:<:]]1[[:>:]]", 1=>"[[:<:]]2[[:>:]]");
$query="SELECT * FROM table WHERE filters REGEXP '$filter[0]' AND filters REGEXP '$filter[1]'";
решает проблему... То есть, под каждый фильтр дописывается ещё один REGEXP... Если использовать не более двух-трёх фильтров при выборке, полагаю, нагрузка на mysql сервер будет в пределах нормы, но если таких regexp'ов будет 20-30-40?
Собственно вопрос: есть ли красивый выход из ситуации? Заранее спасибо.