作者热门文章
- android - 如何使用 adjustPan 保持工具栏可见?
- android - 在 android 的 Google Chrome 中,如何设置 unsafely-treat-insecure-origin-as-secure
- android - Android 4.1/4.3/4.4 电子邮件应用程序中的 FileProvider 失败,列 '_data' 不存在
- Android Studio + Liquid Fun
我目前将用户的输入存储在逗号分隔的列表中,如下所示:
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,因为至少有一个值匹配对吗?或者我有这个困惑..
最佳答案
可能是你做错了。
如果选项列类型是 SET
,函数 FIND_IN_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
关于MySQL 列表 IN 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8352115/
我是一名优秀的程序员,十分优秀!