我有下表:
TableFinal
column id, with first row having value 1
column numbers, with first row having value `1,5,6,33,2,12,3,4,9,13,26,41,59,61,10,7,28`
和
TablePick
column id, with first row having value 1
column numbers, with first row having value 2,12,26,33
我想检查 TablePick 的“selected”列中的数字是否包含在 TableFinal 的“numbers”列中。
不得不提的是,在TablePick中,“selected”列中的数字是按ASC排序的,而在TableFinal中,“numbers”列中的数字是打乱顺序的。
通常我会使用 PHP 将它们放入一个数组中,然后将这 2 个数组相交并对结果数组进行计数。但在 MYSQL 中,事情就没那么简单了,所以实际上我不知道从哪里开始。
也许我应该创建一个 ARRAY_INTERSECT 函数?或者我们有更简单的解决方案吗?
SELECT * FROM TablePick p RIGHT JOIN TableFinal f ON f.id=p.id WHERE ARRAY_INTERSECT(p.selected,f.numbers)
最佳答案
很抱歉这么说,但是您的架构需要认真维护:永远不要在一个字段中存储多个信息(如果您需要单独访问它们)。
您需要一对连接表,而不是第一行 (1, "1,5,6,33,2,12,3,4,9,13,26,41,59, 61,10,7,28")
你有行
(1,1)
(1,5)
(1,6)
(1,33)
...
而不是行 (1, "2,12,26,33")
你有行
(1,2)
(1,12)
(1,26)
(1,33)
现在您的查询很简单:
SELECT ... FROM TableFinal
INNER JOIN TABLE TablePick ON TableFinal.number=TablePick.number
WHERE TableFinal.id=1
AND TablePick.id=1
编辑
请理解,即使这在没有滥用 MySQL 的情况下是可能的,一旦行数开始增加,它也会成为性能 killer :如果表有 n 行和 m 行,我们正在谈论 n*m 数组相交分别。
关于php - Mysql 两个字符串相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389146/