所以这就是我需要解决的问题:我的数据库中的用户正在学习一定数量的课程。这些课程都已编号,因此行courses
的值可以是12, 34, 56
或12
或''等。现在,我正在执行搜索查询以查找关注的用户某一课程。我在考虑使用LIKE
,但这似乎是一个不切实际的解决方案,因为我必须按如下方式匹配它:
courses LIKE '$course,%' OR courses LIKE '%,$course,%' OR courses LIKE '%,$course' OR courses LIKE '$course'
由于有四种不同的匹配方法,我希望有更好的解决方案,但我自己还没有想过任何事情。有创意解决方案的人吗?谢谢你。
答案 0 :(得分:3)
MySQL实现了一个名为FIND_IN_SET()
的函数,该函数从逗号分隔值中搜索值,例如
SELECT *
FROM TableName
WHERE FIND_IN_SET('12', 'comma separated value') > 0
考虑规范化表格。将comman分隔值存储在单个列中是一个糟糕的主意。
答案 1 :(得分:0)
您可以在数据库中添加另一个表course
,还可以在courses
和users
之间建立链接:
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的数组。 如果您想要添加有关课程的更多信息(超过一个数字)
,此解决方案可能很有用答案 2 :(得分:-1)
尝试使用
WHERE courses IN (12,34,56);