php - Mysql 两个字符串相交

标签 php mysql sql

我有下表:

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/

相关文章:

sql - 为什么SQL变量仍然保留以前的值?

php - curl 总是返回 false

mysql - sql中的条件Where子句

php - 我的表单正在提交多个数据库条目,但我不希望它这样做

php - 如何使用javascript和数据库mysql创建数组?

mysql 优化存储过程插入

javascript - 尝试访问嵌套查询中的数组时未定义

SQL 仅选择拥有所有 3 个学位的成员

php - - mongodb/mongodb 1.2.0 需要 ext-mongodb ^1.3.0 -> 您的系统中缺少请求的 PHP 扩展 mongodb

PHP 邮件客户端库