J'ai fait quelque chose de similaire en traitant des listes d'ID séparées par des virgules pour émuler des masques de bits. L'astuce consiste à faire une jointure en utilisant comme '%,id,% (où id est la clé dans une table indexée par id). Dans votre cas, je joins table_1 à une table d'entiers séquencés et le résultat inclut une ligne pour chaque identifiant dans votre colonne product_id.
Je le fais une fois pour chaque identifiant que vous demandez et je joins les tables dérivées résultantes pour trouver les plus communes.
Voici la requête :
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