我有以下简单的MySQL查询返回0结果:
SELECT d.name FROM document d WHERE 10 IN (d.categories)
“categories”的类型为varchar,包含例如“10,20,30”。
当我直接输入IN值时,它会起作用并返回结果:
SELECT d.name FROM document d WHERE 10 IN (10,20,30)
我怀疑MySQL用这样的东西代替d.documents当然不是我想要的东西:
SELECT d.name FROM document d WHERE 10 IN ("10,20,30")
对此有什么正确的解决方法?
答案 0 :(得分:6)
当您提供的价值为" 10,20,30"然后将其视为单个值,而不是预期的三个不同值。要将值设为三个不同的值,您需要在MySQL中使用find_in_set函数。
我还建议你仔细阅读这个主题:Is storing a delimited list in a database column really that bad?
答案 1 :(得分:2)
是的,使用find_in_set:
SELECT d.name FROM document d WHERE find_in_set(10, d.categories) > 0