0

所以这是我需要解决的问题:我的数据库中的用户正在学习一定数量的课程。这些课程都是编号的,所以该行的值courses可以是12, 34, 5612或''等。现在我正在做一个搜索查询来查找正在关注某个课程的用户。我正在考虑使用LIKE,但这似乎是一个不切实际的解决方案,因为我必须按如下方式匹配它:

courses LIKE '$course,%' OR courses LIKE '%,$course,%' OR courses LIKE '%,$course' OR courses LIKE '$course'

由于有四种不同的匹配方式,我希望有一个更好的解决方案,但我自己还没有想到任何东西。有人有创造性的解决方案吗?谢谢一米。

4

3 回答 3

3

MySQL 已经实现了一个名为FIND_IN_SET()从逗号分隔值中搜索值的函数,例如

SELECT *
FROM   TableName
WHERE  FIND_IN_SET('12', 'comma separated value') > 0

考虑规范化您的表格。将逗号分隔值存储在单个列中是个坏主意。

于 2013-04-08T08:21:07.970 回答
0

您可以在数据库中添加另一个表,然后再添加一个表以建立和course之间的链接:coursesusers

Users (id_user, name,  ...)
Courses (id_course, num_course, ...)

userHasCourse (id_user, id_course)

userHasCourse.id_user并且userHasCourse.id_course是用户和课程表的 id 的外键。

您新的能够取回每个用户的所有课程信息

SELECT Users.name, Courses.num_course FROM Courses JOIN userHasCourse USING id_course JOIN Users USING id_user ORDER BY id_user

您将获得包含所有用户和相关 num_courses 的数组。如果您想添加有关课程的更多信息(不止一个数字),此解决方案可能很有用

于 2013-04-08T08:25:58.687 回答
-1

尝试使用

WHERE courses IN (12,34,56); 
于 2013-04-08T08:16:48.053 回答