Io non ti ho messo una OR ma non sapendo quale sia il riferimento della tabella ho scritto o uno oppure l'altro.
Quello che ti avevo detto riguardo la tabella di unione tra utenti e amici continua ad essere valido. Devi avere un solo record di riferimento e deve sempre essere lo stesso e non su id1 oppure id2
tabella utenti
id_utente, altro
tabella articoli
id_articolo, id_utente, altro
tabella amici
id_amico, id1_utente, id2utente
un articolo e' sempre scritto da un utente, l'utente puo' avere tanti amici (che sono altri utenti), un utente puo' essere amico di vari altri utenti
Se l'utente di riferimento che chiede amicizia mettiamo sia id1 l'utente che la concede sara' id2. Non puo' essere mai che una volta stabilita' la relazione di amicizia tra due utenti ci possano essere ulteriori record (con valori invertiti id1 e id2) ed avere cosi' un cross point. In pratica devi eseguire un controllo per cui se gia' esiste un record di unione di amicizia tra due utenti non se ne possa fare un altro.
Rimane il fatto che non puoi conoscere a priori se l'amico appartiene a chi lo ha chiesto oppure a chi lo ha concesso.
Se quanto credo di aver capito corrisponde al reale proverei con una UNION oppure due join sulla stessa tabella.
due join li puoi invece fare usando l'alias della tabellacodice:(select * from utenti inner join amici on amici.id1_utente = id_utente inner join articoli on articoli.id_articolo = utenti.id_utente where id_utente = 732) UNION (select * from utenti inner join amici on amici.id2_utente = id_utente inner join articoli on articoli.id_articolo = utenti.id_utente where id_utente = 732)

Rispondi quotando