Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 两个字符串相交_Php_Mysql_Sql - Fatal编程技术网

Php 两个字符串相交

Php 两个字符串相交,php,mysql,sql,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“selected”列中的数字是否包含在TableFinal的“Number”列中 我必须提到,在TablePick中,“selected”列中的数字按ASC顺序排列,

我有以下表格:

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“selected”列中的数字是否包含在TableFinal的“Number”列中

我必须提到,在TablePick中,“selected”列中的数字按ASC顺序排列,而在TableFinal中,“numbers”列中的数字按顺序排列

通常,我会使用PHP将它们放在一个数组中,然后将这两个数组相交并计算得到的数组。但是在MYSQL中,它并没有那么简单,所以实际上我不知道从哪里开始

也许我应该创建一个数组_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的情况下是可能的,但一旦行数开始增加,这将是一个性能杀手:如果表分别有n行和m行,我们谈论的是n*m数组相交

MySQL不是万灵药。通常,这种分析(我认为)是在应用层代码中完成的。MySQL中没有数据类型
array
。下面是一个类似的问题,在底部有一个公认的答案。我怀疑数据规范化有助于避免此类问题。两个表中一行中的最大值是多少?这个示例与我的db不同,只是在某种程度上类似于我的要求。我只是想寻找一些方法来相交两个字符串,比如相交2个数组。听起来你需要某种子字符串逻辑来从数据库的混乱中获取一些数据,否则,通过良好的规范化,你只需使用几个连接就可以轻松高效地获取相同的数据
SELECT ... FROM TableFinal 
INNER JOIN TABLE TablePick ON TableFinal.number=TablePick.number
WHERE TableFinal.id=1
AND TablePick.id=1