php – MySQL Select Statement,WHERE’IN’子句
发布时间:2020-12-13 13:02:50 所属栏目:PHP教程 来源:网络整理
导读:我目前在表中有以下行: course_data: user_id days -- This is a varchar column. 405 1,3,5 我正在尝试实现以下SELECT语句: SELECT usrID,usrFirst,usrLast,usrEmail FROM tblUsers WHERE usrID NOT IN ( SELECT users.usrID FROM `course_data` courses,
我目前在表中有以下行:
course_data: user_id days <-- This is a varchar column. 405 1,3,5 我正在尝试实现以下SELECT语句: SELECT usrID,usrFirst,usrLast,usrEmail FROM tblUsers WHERE usrID NOT IN ( SELECT users.usrID FROM `course_data` courses,`tblUsers` users WHERE days IN ('$day') ) GROUP BY usrID ORDER BY usrID 基本上,如果$day变量包含’1,3或5′,我希望省略该行(用户405). 例如,如果$day =“1”,它应该返回一个空查询(因为数字“1”在列“1,5”中). 但是,我没有发现这种情况.即使$day =“1”,它仍会返回该行. 它不会返回行的唯一方法是$day =“1,5”.然而,我认为IN()子句将接受我的变量的任何部分并将其应用于该列. 我在这里做错了什么见解?谢谢.
您应该使用
the like keyword来进行char字段的部分匹配:
where days like '%1%' 编辑:VolkerK和Lukas Lalinsky都建议使用MySQL的find_in_set,这可能比你想做的更好.但是,以下有关规范化数据库的建议仍然适用. 但是,您不应在单个数据库字段中存储多个值.相反,请考虑使用两个表: course_data: user_id course_days: user_id day_number 然后,您将拥有以下数据: course_data: user_id 405 course_days user_id day_number 405 1 405 3 405 5 然后,您可以正确查询此架构.例如: select cd.user_id from course_data as cd where cd.user_id not in ( select course_days.user_id from course_days where course_days.user_id = cd.user_id and course_days.day_number = 1 ) (或者,这应该是关闭的;我不确定你要完成什么或者你的模式的其余部分是什么样的,所以这是最好的猜测). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |