Non ho capito al 100% cosa è special_id. In ogni caso, per ricavare il confronto esegui 4 query.
Mi sono aiutato con la IA (sono molto arrugginito con le queries), ma prova se questa risulta più efficiente:
Codice:
SELECT doppie.user_id, COUNT(*) AS conta
FROM doppie
LEFT JOIN collezioni
ON collezioni.user_id = 98
AND collezioni.capsule_id = doppie.capsule_id
AND collezioni.special_id = doppie.special_id
WHERE doppie.user_id = 122
AND doppie.special_id = 1
AND collezioni.id IS NULL
GROUP BY doppie.user_id
UNION ALL
SELECT doppie.user_id, COUNT(*) AS conta
FROM doppie
LEFT JOIN collezioni
ON collezioni.user_id = 122
AND collezioni.capsule_id = doppie.capsule_id
AND collezioni.special_id = doppie.special_id
WHERE doppie.user_id = 98
AND doppie.special_id = 1
AND collezioni.id IS NULL
GROUP BY doppie.user_id;
Per il confronto tra tutti gli utenti, dovresti riuscire a farlo tutto tramite mysql, dovrebbe essere molto più veloce. Una cosa del genere:
Codice:
SELECT doppie.user_id AS da_utente,
collezioni.user_id AS a_utente,
COUNT(*) AS conta
FROM doppie
JOIN collezioni
ON collezioni.special_id = doppie.special_id
LEFT JOIN collezioni AS check_collezioni
ON check_collezioni.user_id = collezioni.user_id
AND check_collezioni.capsule_id = doppie.capsule_id
AND check_collezioni.special_id = doppie.special_id
WHERE doppie.user_id <> collezioni.user_id
AND check_collezioni.id IS NULL
GROUP BY doppie.user_id, collezioni.user_id
ORDER BY doppie.user_id, collezioni.user_id;
Ciao!