Здравствуйте. Допустим, в некой таблице есть столбец stolb. Значения сохраняются в виде одного или нескольких наборов цифр (5-6 символов), которые разделены друг от друга переносом строки. Например, имеется три записи со следующими значениями: 112019 52019 82019 12019 62019 12019 Какой правильно составить запрос, чтобы получить строки под номерами №2 и №3 в которых есть 12019? С помощью оператора LIKE я сделал так: ...WHERE stolb LIKE '%12019%' . Но в результат также попала запись №1.
Изначально понятно что здесь "архитектурная" ошибка. Эти числа надо было разместить в отдельных записях. Но если всё-таки попытаться выловить рыбку из этой говнины мешанины, то like не подходит: с * С пробелами в паттерне он отклонит вариант когда число стоит первым или последним, * без пробелов он может по ошибке признать число с бОльшим кол-вом разрядов, включающим искомую подстроку. Есть функция find_in_set() которая бы справилась, если бы список был с разделителем "," а не " ". Но лучше таки использовать отдельные записи. Учите "нормальные формы"!
если нет возможности изменить архитектуру.. измените тип записи в столбец... что бы числа были записаны через запятую и потом для их поиска использовать FIND_IN_SET... хотя конечно лучше или отдельные столбцы, или если мы не знаем сколько чисел будет - то сделать еще одну табличку (one to many)
Благодарю всех отозвавшихся за помощь, решил свою задачу следующим образом: ...WHERE stolb LIKE '%12019%' AND stolb NOT LIKE '%112019%' вроде сработало как надо
@desertFox, вы только что стали на табуреточку и накинули петлю на шею. Теперь время играет против вас.