За последние 24 часа нас посетили 17529 программистов и 1712 роботов. Сейчас ищут 1864 программиста ...

Помогите создать запрос в БД

Тема в разделе "PHP и базы данных", создана пользователем voron121, 17 фев 2017.

  1. voron121

    voron121 Активный пользователь

    С нами с:
    18 ноя 2016
    Сообщения:
    29
    Симпатии:
    1
    Доброго времени суток. Есть компонент на CMS Joomla. В компоненте есть модель с запросом в бд. В компоненте есть фильтр записей (по аналогии с фильтром товаров). Запись имеет некоторое количество опций. Опции в админке сгруппированы в серию чекбоксов и записываются в свою ячейку в бд в формате 1,2,3,47,8, и так далее. Из формы фильтра я получаю значения нескольких чекбоксов которые передаются как массив.

    То есть подводя итог : есть ячейка в которой хранятся данные в таком виде : 1,2,3,47,8 ... и есть массив из формы с параметрами array ( [0]=>1, [1]=>8 ) и так далее. Как мне написать условие выборки в БД ?
    Пробовал запись такого вида :

    Код (Text):
    1. SELECT * FROM #__test WHERE filter_time LIKE ( '%0', '8%' )
    Но это не верно т.к в таком случае мы не по одному значению сравниваем а по строке. Пробовал вот так :
    Код (Text):
    1. SELECT * FROM #__test WHERE filter_time IN( '0', '8' )
    Результат весьма странны что в принципе предсказуемо ведь в ячейке filter_time у нас хранится не 1 значение а их серия
     
  2. Drema

    Drema Новичок

    С нами с:
    20 фев 2017
    Сообщения:
    117
    Симпатии:
    30
    по ИЛИ что-то типа такого:

    PHP:
    1. $sql = "
    2.  
    3. SELECT t.*
    4. FROM #__test t
    5. WHERE
    6.   EXISTS(SELECT 1 FROM
    7.      (SELECT ".implode(" as v UNION SELECT ", $arr).") t1
    8.      WHERE LOCATE(CONCAT(',', t1.v, ','), CONCAT(',', t.filter_time, ',')) > 0
    9.  )
    10.  
    11. ";
     
    voron121 нравится это.
  3. voron121

    voron121 Активный пользователь

    С нами с:
    18 ноя 2016
    Сообщения:
    29
    Симпатии:
    1
    Чуть по другому сделал. Оказалось регулярки - отличная вещь )
    PHP:
    1. SELECT * FROM #__tablename WHERE( filter_time REGEXP 1 | 3 | 6 OR filter_time REGEXP 1 & 3 & 6 )
     
    #3 voron121, 26 фев 2017
    Последнее редактирование модератором: 27 фев 2017
    Drema нравится это.