SQL查询以匹配单个列中的多个值

时间:2014-12-20 14:36:27

标签: php mysql

这个虚拟表:

name | lesson_mode
-------------------

a    | 1,2,3
b    | 2,3 
c    | 2
d    | 3

使用此查询:

SELECT * FROM `cc_teacher` WHERE lesson_mode IN (2,3)

我得到了

name | lesson_mode
-------------------

b    | 2,3 
c    | 2
d    | 3

我在搜索结果中遇到问题,我的问题是假设,在这种情况下我们正在讨论lesson_mode列,我已经编写了这样的SQL查询:

SELECT * FROM `cc_teacher` WHERE lesson_mode IN (2,3) 

但我没有得到1,2,3的行,所以请帮助我。有谁知道怎么做?

1 个答案:

答案 0 :(得分:4)

最好的帮助是修复数据结构的建议。你应该有一个TeacherLessons的表,每个教师一行,每节一行。 SQL具有用于存储列表的出色数据结构。它被称为" table",而不是" string"。更糟糕的是,您将数字ID存储为字符串。

可以使用find_in_set()执行您想要的操作。它看起来像是:

select *
from cc_teacher
where find_in_set(2, lesson_mode) > 0 or
      find_in_set(3, lesson_mode) > 0;

但我的主要建议是通过引入联结表来修复我们的数据库结构。