我有下表:
... | parents_id | ...
________________________
... | 1, 40, 7 | ...
... | 10, 4, 7, 1 | ...
... | 45, 40, 1, 7 | ...
... | other_rows | ...
现在,我需要获取这三行,我使用此查询 SELECT * FROM products WHERE FIND_IN_SET(1, parents_id) > 0
,但我只获取第一行 (1 , 40, 7
), 有什么帮助吗?
最佳答案
As per documentation - FIND_IN_SET
的第二个参数是逗号分隔列表。因此,值 10, 4, 7, 1
被逗号分隔为以下 4 个值:
10
4
- 空格后跟 47
- 空格后跟 71
- 空格后跟 1
它们都不等于1
解决方案:停止使用这种方法并规范化您的架构以使用一对多(或多对多)。
关于MySQL FIND_IN_SET() 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011550/