SELECT - 拆分字段的内容

时间:2018-04-02 18:04:54

标签: php mysql sql

我的桌子

id | email  | values
1  | a@a    | 2,3,
2  | b@b    | 1,3,
3  | c@c    | 2,

如何将VALUES字段中的数字与ID

中的数字进行比较
$sql = "SELECT * FROM table WHERE email = 'c@c' AND id NOT LIKE (each id column) ";

结果= ID 1

3 个答案:

答案 0 :(得分:2)

关于数据库规范化的要点是正确且非常重要的:

  • 您不应该在一个字段中存储多个值。
  • 您不应将数字存储为字符串。
  • 您应该正确声明所有外键关系,而这些关系不能用于此类列表。
  • SQL的字符串处理功能非常糟糕。
  • Table具有用于存储列表的非常好的数据结构。它被称为

也就是说,有时我们会遇到其他人真正的,非常非常糟糕的设计决策。 MySQL有一个方便的解决方法(在我看来太方便了),称为find_in_set()

SELECT t.*
FROM t.table WHERE email = 'c@c' AND
     find_in_set(t.id, values) = 0;

答案 1 :(得分:2)

此查询在值列中查找带有后缀逗号的id。 Id可以在开头,也可以在值列之间。当id为1但是值为(21,3)或(2,31,)时,这也不会返回一行,因为值总是以逗号(,)分隔。

select *
from truck where email='c@abc.com'
and values not like concat(Id,',%')
and values not like concat('%,',Id,',%')

答案 2 :(得分:1)

我相信你正在寻找这样的东西:

 select * from yourtable
 where [values] like '%,'+cast(id as varchar)+',%' 
 or [values] like cast(id as varchar)+',%'
 or [values] like '%,'+cast(id as varchar)