Доброго времени суток. Есть компонент на CMS Joomla. В компоненте есть модель с запросом в бд. В компоненте есть фильтр записей (по аналогии с фильтром товаров). Запись имеет некоторое количество опций. Опции в админке сгруппированы в серию чекбоксов и записываются в свою ячейку в бд в формате 1,2,3,47,8, и так далее. Из формы фильтра я получаю значения нескольких чекбоксов которые передаются как массив. То есть подводя итог : есть ячейка в которой хранятся данные в таком виде : 1,2,3,47,8 ... и есть массив из формы с параметрами array ( [0]=>1, [1]=>8 ) и так далее. Как мне написать условие выборки в БД ? Пробовал запись такого вида : Код (Text): SELECT * FROM #__test WHERE filter_time LIKE ( '%0', '8%' ) Но это не верно т.к в таком случае мы не по одному значению сравниваем а по строке. Пробовал вот так : Код (Text): SELECT * FROM #__test WHERE filter_time IN( '0', '8' ) Результат весьма странны что в принципе предсказуемо ведь в ячейке filter_time у нас хранится не 1 значение а их серия
по ИЛИ что-то типа такого: PHP: $sql = " SELECT t.* FROM #__test t WHERE EXISTS(SELECT 1 FROM (SELECT ".implode(" as v UNION SELECT ", $arr).") t1 WHERE LOCATE(CONCAT(',', t1.v, ','), CONCAT(',', t.filter_time, ',')) > 0 ) ";
Чуть по другому сделал. Оказалось регулярки - отличная вещь ) PHP: SELECT * FROM #__tablename WHERE( filter_time REGEXP 1 | 3 | 6 OR filter_time REGEXP 1 & 3 & 6 )