这个虚拟表:
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
的行,所以请帮助我。有谁知道怎么做?
答案 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;
但我的主要建议是通过引入联结表来修复我们的数据库结构。