比较两个sql表

时间:2017-09-16 21:11:26

标签: php mysql pdo

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

enter image description here

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

表A id:1包含表B中的2个单词(car,red) id:2包含来自表B的2个单词(house,hill) id:3包含来自表B的0个单词 id:4包含来自表B的2个单词(small,shoe)

2 个答案:

答案 0 :(得分:0)

<?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!

答案 1 :(得分:0)

考虑在聚合查询中使用CROSS JOIN的纯SQL解决方案,计算 string word 之间的LIKE个实例。下面使用条件SUM聚合计算总数,并以逗号分隔列表中的GROUP_CONCAT输出单词:

SELECT t1.id, SUM(CASE WHEN t1.string LIKE CONCAT('%', t2.words, '%') 
                       THEN 1 
                       ELSE 0 
                  END) AS WordCount,
              GROUP_CONCAT(CASE WHEN t1.string LIKE CONCAT('%', t2.words, '%') 
                                THEN t2.words 
                                ELSE NULL 
                           END) AS Words
FROM Table1  t1
CROSS JOIN Table2 t2
GROUP BY t1.id

请参阅rextester demo

警告:CROSS JOIN可能会降低大型表的性能,因为笛卡尔积(所有可能的组合配对)在两个集之间运行,可以非常快速地运行到数百万个。