获取所有在列中有价值的行

时间:2018-06-26 15:32:48

标签: php mysql codeigniter

如何在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  |

3 个答案:

答案 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

demo