我有以下表格:
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的“数字”列中。
我必须提到,在TablePick中,“selected”列中的数字是ASC排序,而在TableFinal中,“number”列中的数字是混洗的。
通常我会使用PHP将它们中的每一个放在一个数组中,然后将两个数组相交并计算结果数组。但是在MYSQL中,它并不那么简单,所以实际上我不知道从哪里开始。
也许我应该创建一个ARRAY_INTERSECT函数?或者我们有一个更简单的解决方案吗?
SELECT * FROM TablePick p RIGHT JOIN TableFinal f ON f.id=p.id WHERE ARRAY_INTERSECT(p.selected,f.numbers)
答案 0 :(得分:1)
很抱歉这么说,但您的架构需要一些严格的维护:永远不会在一个字段中存储多个信息,如果您需要单独访问它们。
你需要一对连接表,而不是第一行(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滥用这种情况也是可能的,一旦行数开始上升,它就会成为性能杀手:如果表格有n行和m行,我们说的是n * m数组相交respectivly。