SELECT c1.blog_id, c2.blog_id, CONCAT( c1.blog_id, c2.blog_id ) AS ignore_me, COUNT( c1.user_id ) AS common_user_cnt
FROM commentz c1 USE INDEX ( IX_blog_user_id )
JOIN commentz c2 USE INDEX ( IX_blog_user_id ) ON c1.blog_id != c2.blog_id
WHERE c1.blog_id < c2.blog_id
AND c1.user_id = c2.user_id
GROUP BY ignore_me
A common_user_cnt elvileg megadja a közös usereket (mindkét blogon létezik ugyanaz a user_id).
Olyan sorokat joinol, ahol nem egyezik a blog_id. A bidirekcionális egyezéseket a where első fele eldobja. Az ignore_me alapjan csoportositunk az aggregáthoz. Biztosan van jobb megoldas, de a heti sör mar megvolt.
Lehet profilozni :) Nincs kedvem 5millió sort berandomizálni.