Originariamente inviato da fraermejo
il risultato è:
amico_di | amici
2 | 3,4,5
3 | 2,4,5
4 | 2,3,5
5 | 2,3,4
10 | 3,6
ti ringrazio per l'aiuto che mi hai dato, ma non ho capito bene cosa restituisce questa query...
![]()
Io dovrei ottenere una cosa di questo tipo:
Io, Luigi, cerco su RICERCA UTENTI: Francesco.
Siccome ci sono tantissime persone che si chiamano così, dovrebbe elencarle tutte, in base al numero di amici in comune che ogni Francesco ha con me. Il Francesco che ha come amici 4 dei miei amici, si troverà prima di un altro Francesco che ha come amici soltanto 2 dei miei...
Come estraggo i risultati dalla query?![]()
Ti posto un altro dump con due tabelle, una relativa agli utenti e una alle amicizie
La query che ho scritto è questacodice:CREATE TABLE `amici` ( `id` int(11) NOT NULL auto_increment, `amico_di` int(11) default NULL, `id_amico` int(11) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1; insert into `amici` (`id`,`amico_di`,`id_amico`) values (1,4,1),(2,4,2),(3,5,4),(4,4,6),(5,7,1),(6,2,7),(7,8,4), (8,8,7),(9,9,1),(10,9,2),(11,9,3),(12,9,6),(13,6,4), (14,6,7),(15,6,1),(16,6,2),(17,6,3),(18,1,2),(19,1,3),(20,4,3); CREATE TABLE `utenti` ( `id` int(11) NOT NULL auto_increment, `nome` varchar(50) default NULL, `cognome` varchar(50) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1; insert into `utenti` (`id`,`nome`,`cognome`) values (1,'Francesco','Bianchi'),(2,'Francesco','Rossi'),(3,'Francesco','Verdi'), (4,'Luigi','Bianchi'),(5,'Stefano','Verdi'),(6,'Francesco','Rossini'), (7,'Mario','Rossi'),(8,'Antonio','Verdi'),(9,'Stefano','Bianchi');
il 4 dell'esempio corrisponde all'utente che effettua la ricerca, nello specifico a Luigi Bianchi e conterà quanti amici comuni di nome Francesco ha con gli altri utenti.codice:select amico_di,u.nome,u.cognome,quanti from ( select amico_di,count(id_amico) as quanti from ( select amico_di,id_amico from amici union select id_amico,amico_di from amici order by id_amico ) as tab where id_amico = any (select id_amico from amici as a inner join utenti as u on a.id_amico = u.id where u.nome = 'Francesco' and amico_di = 4 union select amico_di from amici as a inner join utenti as u on a.amico_di = u.id where u.nome = 'Francesco' and id_amico = 4) and amico_di <> 4 group by amico_di) as tab2 inner join utenti as u on tab2.amico_di = u.id order by quanti desc
Nelle mie tabelline ho messo 4 utenti di nome Francesco con id 1,2,3 e 6 e tutti sono amici di Luigi. L'utente con id 9 è amico di tutti e 4, quindi il conteggio sarà pari a 4, l'utente con id 7 invece è amico solo dei Francesco con id 1,2 e 6 e quindi avrà conteggio pari a 3 e così via.
Mi sembra che faccia esattamente ciò che hai chiesto.![]()