Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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 比较两个sql表_Php_Mysql_Pdo - Fatal编程技术网

Php 比较两个sql表

Php 比较两个sql表,php,mysql,pdo,Php,Mysql,Pdo,我有两个表,一个是文本字符串,另一个是单词 如何获取表A中的每个字符串/行,并查看表A中每个字符串包含的表B中的“单词”数量,并得到如下结果: 表A id:1包含表B中的两个单词(汽车、红色) id:2包含表B中的两个单词(房子、山) id:3包含表B中的0个单词 id:4包含表B中的2个单词(小的,鞋形的)考虑一个纯SQL解决方案,在聚合查询中使用交叉连接,计算字符串和单词之间的LIKE实例。下面使用有条件的SUM聚合计算总数,并使用GROUP\u CONCAT以逗号分隔的列表输出单词: &

我有两个表,一个是文本字符串,另一个是单词

如何获取表A中的每个字符串/行,并查看表A中每个字符串包含的表B中的“单词”数量,并得到如下结果:

表A
id:1包含表B中的两个单词(汽车、红色)
id:2包含表B中的两个单词(房子、山)
id:3包含表B中的0个单词

id:4包含表B中的2个单词(小的,鞋形的)

考虑一个纯SQL解决方案,在聚合查询中使用
交叉连接
,计算字符串和单词之间的
LIKE
实例。下面使用有条件的
SUM
聚合计算总数,并使用
GROUP\u CONCAT
以逗号分隔的列表输出单词:

<?php
// Get $TableA from TableA and $TableB from Table B (std code)

$result = array();
foreach ($TableA as $id => $string) {
    $result[$id] = array();
    $words = explode(' ', $string);
    foreach ($words as $word) {
        if (in_array($word, $TableB)) {
            $result[$id][] = $word;  
        }
    }
}

// - display $result - left as exercise!
选择t1.id,SUM(t1.string-LIKE-CONCAT(“%”,t2.words,“%”时的大小写)
那么1
其他0
结束)作为字数,
组_CONCAT(t1.string-LIKE CONCAT(“%”,t2.words,“%”时的大小写)
然后是t2。单词
否则无效
(完)作为词语
来自表1 t1
交叉连接表2 t2
按t1.id分组


警告:
交叉联接
可能会降低大型表的性能,因为笛卡尔乘积(所有可能的组合对)在两个集合之间运行,这两个集合可以非常快地运行数百万次。

是,并且?您尝试过什么?可能文本示例数据将有助于连接表、分离表、导出数组,以及在周围摆弄数小时……这将是一件有趣的事情;许多答案是可能的,但它们很少是完全正确的。(你有虐待狂老师吗?)这需要一个双循环,带有一个将字符串短语分割成词根的函数。这不是一个简单的MySQL查询。我喜欢这个问题。可以通过与显示语言(如PHP)结合使用的函数来回答我同意使用PHP可以相对容易地解决这个问题。LIKE不是解决这个问题的好方法,因为如果字符串包含fast和faster,并且word是test,那么它会将其计为1,这是错误的,这看起来可能是正确的方向。但是,我如何从您的示例中获得结果表,如您的rextester deme示例中所示?绝对正确@M Khalid Junaid。。。OP应该注意这个警告。我可以使用完全相等的不同解决方案进行更新@柠檬酸机器人。。。我不明白你的问题。此解决方案作为最后一个查询在演示中。前两个表显示了复制的数据。@Parfait-由于我有限的mySQL/php技能,我无法获得您得到的结果。我正在使用PDO:$conn=newPDO(“mysql:$host$db_name,$username,$password”);$sql=“(您的代码)”$q=$conn->prepare($sql)$q->execute(数组($title))$q->setFetchMode(PDO::FETCH_二者);while($data=$q->fetch()){??在这里做什么?}我做错了什么?只需通过索引、
$data[0]
或列名、
$data['id']
while
循环中回显$data数组即可。