Vedi se così va bene

codice:
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=19 DEFAULT CHARSET=latin1;

/*Data for the table `amici` */

insert into `amici` (`id`,`amico_di`,`id_amico`) values (1,1,2);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (2,1,3);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (3,1,4);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (4,1,5);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (5,1,6);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (6,2,3);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (7,2,4);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (8,3,10);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (9,4,2);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (10,4,3);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (11,5,2);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (12,5,3);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (13,5,4);
insert into `amici` (`id`,`amico_di`,`id_amico`) values (14,6,10);


select amico_di,group_concat(id_amico) as amici from (
select amico_di,id_amico
from amici where id_amico = any (select id_amico from amici where amico_di = 1)
and amico_di <> 1) as tab
group by amico_di
La query mostrerà tutti gli utenti che hanno amici comuni all'utente 1.

edit. Quest'altra mi sembra risolva anche i casi di reciprocità

codice:
select amico_di,group_concat(id_amico order by id_amico) as amici 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 where amico_di = 1 
		      union select amico_di from amici where id_amico = 1) 
and amico_di <> 1
group by amico_di
order by amico_di
Provale e facci sapere.