Mysql Поиск в списке значений

ggfdsfds

Новичок
Есть поле записи - в котором хранятся спиской id-других записей через ","-запятую.

Пример - 1,11,101

Как правильно сделать поиск значения 1 в этом списке, что бы при поиске 1 не спуталось с 11 и со 101?
Вот как искать здесь это понятно:

[1][11][101]

Просто сделаю LIKE '%[1]%'; И это уже точно ни как не спутается с [11] и c [101].
 

ggfdsfds

Новичок
Не совсем понял, что значит "нормально хранить данные".
Что плохого в том, что у меня есть колонка - и в ней через запятую храниться список id-других записей?

Делал один раз такой поиск - и у меня получалось что-то вроде
LIKE '1,%'
OR LIKE '%,1,%'
OR LIKE '%,1'
OR LIKE = 1

это грамотно?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
ggfdsfds, плохого в этом подходе то, что ты нарушаешь принципы построения реляционных баз данных.

И теперь вместо ... WHERE field IN(1,2,3) ты будешь писать запрос, который у тебя будет делать фуллскан таблицы из-за адово кривого LIKE '%...%', и это к тому же вместо запроса по индексу.

Имхо, это не просто неграмотно, это звездец.
 
Последнее редактирование:

ggfdsfds

Новичок
Понял в чем подвох про нарушение принципа построения реляционных баз данных.
Тогда буду делать так как надо.
Спасибо.
 

riff

Новичок
ggfdsfds,
1. Хранить данные надо нормально, то есть в твоем случае - делать несколько строк
Позволю себе дополнить ответ c0dex.
Возможно даже не несколько копий (строк) этой записи, а отдельную таблицу для связи записи из одной таблицы со множеством из другой.
Ничего вразумительного не придумал, но например: товар может находиться в разных каталогах. Не будешь же ты дублировать строку товара два-три-... раза, вместо этого создашь отдельную таблицу из двух полей "product_id, catalog_id", и там хоть обдублируйся.
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну я рад, что автор уразумел истину)
 
Сверху