Как получить все строки, имеющие значение 1, но не 11 в column news_short?
column news_short
Вот мой стол:
id | news_short | 1 | 1,2,3,4,5,6,7 | 2 | 2,4,5,6,1,5,6 | 3 | 11,2,5,6,9,4 |
FIND_IN_SET () возвращает позицию строки, если она присутствует (как подстрока) в списке строк
, поэтому вы должны искать, если значение равно! = 11
например:
->where("FIND_IN_SET(news_short) !=", 11)
Лучше всего было бы нормализовать вашу схему. Не хранить отношения в виде списка, разделенного запятыми. Вместо этого создайте таблицу соединений, чтобы поддерживать от m: m ко многим или, если отношение один ко многим между главной таблицей и этими значениями news_short (возможно, из другой таблицы), создайте новую таблицу как news_short с идентификаторами основной таблицы столбцов и идентификатором news (таблицы) и в каждой строке сохраните одну ассоциацию для your_table и news.
Если вы не можете обновить / изменить свою схему, вы можете использовать find_in_set(), но это не очень хорошая опция
find_in_set()
select * from your_table where find_in_set(1, news_short) > 0
демо
Я согласен, что вы должны нормализовать. Но вот решение, как оно сидит.
Select * from table where news_short like '%1,%' and news_short not like '%11,%';