Tôi đã làm điều gì đó tương tự xử lý danh sách ID được phân tách bằng dấu phẩy để mô phỏng mặt nạ bit. Thủ thuật là thực hiện một phép nối bằng cách sử dụng như '%, id,% (trong đó id là khóa trong bảng được lập chỉ mục bởi id). Đối với trường hợp của bạn, tôi nối table_1 với một bảng gồm các số nguyên được sắp xếp theo thứ tự và kết quả bao gồm một hàng cho mọi id trong cột product_id của bạn.
Tôi thực hiện việc này một lần cho mỗi id bạn đang yêu cầu và tham gia các bảng dẫn xuất kết quả để tìm các id chung.
Đây là truy vấn:
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