@dind

Как правильно отбирать данные с помощтю REGEXP в MYSQL?

Есть в ячейке данные через запятую, j1_5,j1_2,j1_9,j1_1,j1_3,j1_6,j1_7,j1_10,j1_11,j1_8

В фильтре пользователь может выбрать один город, например, Москву. А Москва это j1_3
Как с помощью регулярки выбрать только те записи, в которых есть j1_3?
j1_5,j1_2,j1_9,j1_1,j1_3,j1_6,j1_7,j1_10,j1_11,j1_8

SELECT SQL_CALC_FOUND_ROWS t1.*, t2.`title` `category_title`, t2.`title_alias` `category_alias` FROM `records` t1 LEFT JOIN `sbr333_categs` t2 on (t1.`category_id` = t2.`id`) WHERE t1.`status` = 'active' AND t1.`cities` REGEXP '[j1_9, j1_6, j1_7, j1_3]' ORDER BY `title` DESC

Когда есть толко один параметр, например j1_3, то уже ищет
AND t1.`type` REGEXP '[[:<:]]" . $value . "[[:>:]]'

А когда их приходит несколько, вот так t1.`status` = 'active' AND t1.`type` REGEXP '[[:<:]]j1_1, j1_2, j1_3, j1_4[[:>:]]'
то уже нет
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 3
sbh
@sbh
Не думали изменить структуру БД и логику работы? Сдается мне что БД странно спроектирована.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Либо нормализуйте базу и выделяйте это поде в отдельную таблицу, либо переходите на PostgreSQL, там есть тип array.
Ответ написан
Комментировать
@bes_internal
webdev: perl, gentoo, html/css
Дописать составление запроса из параметров-городов до получения конструкции:
WHERE .... AND ( t1.`type` REGEXP ',j1_1,'   OR  t1.`type` REGEXP ',j1_4,'  ... )

Это решает вашу задачу, но нужен FULLTEXT индекс на это поле для производительности или переписать логику хранения этих данных
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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