如何在column news_short
中获得所有值为1而不是11的行?
这是我的桌子:
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 |
答案 0 :(得分:0)
我同意您应该正常化。但是这就是解决方案。
Select * from table where news_short like '%1,%' and
news_short not like '%11,%';
答案 1 :(得分:0)
FIND_IN_SET()返回字符串的位置(如果存在)(作为子字符串)在字符串列表中
因此您应该搜索值是否为!= 11
例如:
->where("FIND_IN_SET(news_short) !=", 11)
答案 2 :(得分:0)
您最好的选择是规范您的架构不要以逗号分隔列表的形式存储关系,而是创建一个联结表来维护m:m many to many或主表之间的一对多关系表和这些news_short(可能来自其他表)的值,创建一个新表,作为news_short,具有主表ID和news(table)ID列,并在每一行中为your_table和news保存一个关联。
如果您无法更新/更改架构,则可以使用find_in_set()
,但这不是一个好选择
select *
from your_table
where find_in_set(1, news_short) > 0