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.

codice:
(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)
due join li puoi invece fare usando l'alias della tabella