作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的伪查询:
SELECT col1, col2 FROM table WHERE number IN(number1,number2,number3);
示例
SELECT name, description FROM products WHERE 5 IN(category_id);
注意:假设表中的其中一行有 category_id = 2,5,7
问题
如果该行在逗号分隔集的开头有“5”,则我的查询有效:5,2,7但是如果行以 5 以外的任何其他内容开头,则相同的查询不会返回任何结果。
我尝试了各种方案,在我看来,当 mysql 遇到逗号时,它不再进一步检查以逗号分隔的数字中的匹配项。
我检查了所有有意义的内容,例如格式正确的逗号分隔字符串和排序规则。在这一点上我很困惑。有什么解决办法吗?
请注意,我使用了 FIND_IN_SET()
并且工作完美。但是,我仍然不满足于在不知道真正的问题是什么的情况下放弃 IN()
。为什么它在第一次遇到逗号时停止。
最佳答案
Why does it work on the first value only?
为了将字符串值与数字列进行比较,mysql 将单个字符串值转换为单个数字。当 mysql 将字符串转换为数字时,它会丢弃从第一个非数字字符开始的所有内容,例如:
"1234,5678"
--> 1234
"abc5678"
--> 0
这就是为什么只有 第一个 数字有效。
如果您将字符串值更改为字符串值列表,它将起作用:
SELECT name, description FROM products WHERE 5 IN ('2', '5', '7');
关于mysql - 为什么 num IN ("num1,num2") 在第一个逗号的顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26091549/
我是一名优秀的程序员,十分优秀!