Проверка вхождения числа в строку

258
26 ноября 2016, 20:17

В таблице хранится строка вида '1,2,10,12,30'. Здесь прописываются группы пользователя. Как проверить подходит ли данная группа этому пользователю? Например группа 1 должна подходить для '1,2,11' но не для '11,21', поэтому LIKE не подходит. Какие еще есть варианты? 11 IN(uedb_specializations) работает,только если строка начинается с данного числа.

Answer 1

Самое правильное решение - завести таблицу `groups' и там хранить все группы отдельно. Тогда решение становится элементарным.

Неправильное решение обрамить строку запятыми и использовать LIKE

SELECT * FROM mytable WHERE CONCAT(',', groups, ',') LIKE '%,1,%'
Answer 2

Это будет работать медленно и печально. Заведите дополнительную таблицу USER_GROUPS. В ней должны быть колонки

ID | ID_USER | ID_GROUP

Потом посадите на нее уникальный индекс по полям ID_USER, ID_GROUP и все у вас будет шикарно работать.

READ ALSO
Помогите отредактировать SQL-запрос

Помогите отредактировать SQL-запрос

Есть запрос выводящий все заказыВ таблице teh_otdel есть 6 отделов, и сейчас они все выводятся

247
Оптимизировать SQL запрос

Оптимизировать SQL запрос

В БД (в 5-ти таблицах одновременно, суммарно примерно 20000 строк) осуществляется живой поиск:

237
Вывести только уникальные значения?

Вывести только уникальные значения?

Всем приветЕсть такой вот массив

233
Вывод из mySQL timestamp в UNIX виде

Вывод из mySQL timestamp в UNIX виде

В базе хранится дата и время в виде 2012-09-25 12:31:130 Правильно я понимаю, что на самом деле содержимое просто так отображается, но хранится в формате...

261