Prima di buttarti a scrivere il codice php hai provato a eseguire semplicemente la query? Come fanno tutte quelle condizioni a essere contemporaneamente vere?
Non ho tempo adesso per provare l'sql ma se puoi usare group_concat dovrebbe essere fattibile direttamente con una query come ti dicevo prima.
Se invece vuoi risolvere con php devi lavorare con le funzioni array_diff e count.

Ecco un esempio per farti vedere la logica.

Codice PHP:
<?php
$interessi 
= array('cinema','musica','sport'); // utente che ci interessa

$utenti = array(=> array('musica','cinema','sport'),
                
=> array('musica','pesca','lettura'),
                
=> array('cinema','sport','musica'),
                
=> array('mangiare','dormire','computer'),
                
=> array('birdwatching','dormire','pesca'),
                
=> array('sport','musica','cinema')
            ); 
// array con tutti gli altri utenti
            
$comuni = array();
foreach(
$utenti as $id => $utente) {
    if (
count(array_diff($utente,$interessi)) == 0)
        
$comuni[] = $id;
}
echo 
'<pre>';
print_r($comuni); // stampa 2,4,7 cioè gli id delle persone con gli stessi interessi
?>
Devi solo adattarla alle tue esigenze con l'array che crei dinamicamente tramite query