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(2 => array('musica','cinema','sport'),
3 => array('musica','pesca','lettura'),
4 => array('cinema','sport','musica'),
5 => array('mangiare','dormire','computer'),
6 => array('birdwatching','dormire','pesca'),
7 => 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