考虑我有一个名为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
答案 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