Получить все строки имели значение в столбце - PullRequest
0 голосов
/ 26 июня 2018

Как получить все строки, имеющие значение 1, но не 11 в 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  |

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

FIND_IN_SET () возвращает позицию строки, если она присутствует (как подстрока) в списке строк

, поэтому вы должны искать, если значение равно! = 11

например:

->where("FIND_IN_SET(news_short) !=", 11)
0 голосов
/ 26 июня 2018

Лучше всего было бы нормализовать вашу схему. Не хранить отношения в виде списка, разделенного запятыми. Вместо этого создайте таблицу соединений, чтобы поддерживать от m: m ко многим или, если отношение один ко многим между главной таблицей и этими значениями news_short (возможно, из другой таблицы), создайте новую таблицу как news_short с идентификаторами основной таблицы столбцов и идентификатором news (таблицы) и в каждой строке сохраните одну ассоциацию для your_table и news.

Если вы не можете обновить / изменить свою схему, вы можете использовать find_in_set(), но это не очень хорошая опция

select * 
from your_table 
where find_in_set(1, news_short) > 0

демо

0 голосов
/ 26 июня 2018

Я согласен, что вы должны нормализовать. Но вот решение, как оно сидит.

Select * from table where news_short like '%1,%' and 
news_short not like '%11,%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...