使用php和mysql在数据库中查找匹配

时间:2013-04-08 08:14:48

标签: php mysql sql database select

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

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

由于有四种不同的匹配方法,我希望有更好的解决方案,但我自己还没有想过任何事情。有创意解决方案的人吗?谢谢你。

3 个答案:

答案 0 :(得分:3)

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

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

考虑规范化表格。将comman分隔值存储在单个列中是一个糟糕的主意。

答案 1 :(得分:0)

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

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

userHasCourse (id_user, id_course)

userHasCourse.id_useruserHasCourse.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);