我如何比较两行并存储另一列中两行的相似性

时间:2014-12-01 15:46:59

标签: mysql sql database

考虑我有一个名为table_1的表,如下所示

id               name          products_id
1                hi            1,2,3,4,5,6
2                hello         2,3,5,6
3                wow           5,6,9,10,13
4                total         1,2,5,6,9,13

现在我想比较id = 1和id = 4并在表中创建另一列,其中只有products_id中的值在两行中都相似(即id = 1和id = 4)。 / p>

所以现在我如何在MySQL中做到这一点,我希望上述过程发生在所有行上,相似之处应存储在第4列(即相似性列)。

我希望决赛桌看起来像

id                name           products_id        similarity
1                 hi             1,2,3,4,5,6        1,2,5,6
2                 hello          2,3,5,6            2,3,5,6
3                 wow            5,6,9,10,13        5,6,9,13
4                 total          1,2,5,6,9,13       1,2,5,6,9,13

1 个答案:

答案 0 :(得分:0)

我做了类似的事情,用逗号分隔的ID列表来模拟位掩码。诀窍是使用'%,id,%进行连接(其中id是由id索引的表中的键)。对于您的情况,我将table_1连接到一个有序整数的表,结果包含product_id列中每个id的一行。

我为您请求的每个ID执行一次此操作,并加入生成的派生表以查找常见的。

以下是查询:

SELECT p1.id, p1.name name1,p2.name name2, GROUP_CONCAT(p1.N) similarities
FROM (
SELECT *
 FROM table_1 t1
JOIN sequence8 s8 on CONCAT(',',t1.product_ids,',') LIKE CONCAT('%,',s8.N,',%') 

WHERE t1.id =1
) p1
JOIN 
(
SELECT *
 FROM table_1 t1
JOIN sequence8 s8 ON CONCAT(',',t1.product_ids,',') LIKE CONCAT('%,',s8.N,',%') 

WHERE t1.id =4
) p2 ON p2.n = p1.n
GROUP BY p1.id