Mentre mi accingevo a spiegarti il senso della query mi sono reso conto dell'inutilità dell'if che avevo scritto.
La query definitiva la farei in questo modo
codice:
select a.*,u.username as nome from amicizie as a
inner join utenti as u on a.to_friend= u.id
where from_friend=1 and request_status=1 and friend_blocker=1
union
select a.*,u.username from amicizie as a
inner join utenti as u on from_friend = u.id
where to_friend=1 and request_status=1 and friend_blocker=1
order by nome
Può esserti utile scomporla nelle due parti per capirla meglio
codice:
select a.*,u.username as nome from amicizie as a
inner join utenti as u on a.to_friend= u.id
where from_friend=1 and request_status=1 and friend_blocker=1
In questa query, oltre alle altre condizioni, cerco solo i record nei quali l'dentificativo del campo from_friend è pari ad esempio a 1, cioè all'utente che ti interessa.
Quindi vado a mettere in relazione l'identificativo del campo to_friend con l'id stesso della tabella utenti per poterne ricavare il nome letterale.
Tramite la union accodo i record per i quali invece è il campo to_friend a essere pari a 1 e in questo caso quindi metterò in relazione il campo from_friend con l'altra tabella. L'unione delle due query produrrà il risultato atteso. Spero di essere stato chiaro.