gpt4 book ai didi

MySQL 列表 IN 列表

转载 作者:IT王子 更新时间:2023-10-28 23:46:49 27 4
gpt4 key购买 nike

我目前将用户的输入存储在逗号分隔的列表中,如下所示:

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,32,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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com