我目前将用户的输入存储在逗号分隔的列表中,如下所示:
Userid | Options
1      |  1,2,5
用户在表单中勾选一组选项,这是一个数组,然后用逗号连接
1,2,5
然后MySQL试图找到其他用户,这些用户在不同的字段名称上勾选了一些或所有相同的选项(尽管是同一个表).
目前我这样做:
WHERE `choices` IN ('.$row['myoptions'].')
所以这可能是这样的:
WHERE 1,2,5,8 IN (1,4,6)
这将返回true,因为至少有一个值匹配正确吗?或者我有这个困惑..
Sta*_*arx 21
可能是你做错了.
如果选项列类型为,则函数FIND_IN_SET可能会有用SET.
例:
SELECT * FROM yourtabe WHERE FIND_IN_SET('2', Options);
但是,它只允许您一次比较一个字符串,在上面的示例中,它比较行中是否存在2.如果必须比较多个值,则无法通过使用FIND_IN_SET来实现.
但是,在您的情况下,LIKE条款可能有用.
可能是这样的
SELECT * FROM yourtable WHERE Options LIKE '%2,3%';
现在,这将在列中的任何位置搜索2,3值,并给出结果.但是,这也带有另一个并发症,它给仅当结果2,3是彼此并排存在,如果列2,1,3或者2,4,5,3甚至3,2它不会列出这些记录.
`WHERE `choices` IN (1,4,6)`, 
将转化为
WHERE `choices` = '1' OR `choices` = '4' OR `choices` = '6'
所以它会回来 false
因为您的列不仅包含1或4或6,而且1,2,5包含一个字符串.所以上面的所有比较都返回false