When working with the "one record for friendship" table, all queries will be bloated and error prone, because you will often have to write "id_user1 = ... or id_user2 = ...". I would create a view
CREATE VIEW bidifreinds (id_user1, id_user2, is_accepted, is_blocked, created_at) AS SELECT id_user1, id_user2, is_accepted, is_blocked, created_at FROM friends UNION SELECT id_user2, id_user1, is_accepted, is_blocked, created_at FROM friends
It will make life easier.
Then you can write
SELECT f1.id_user1, f2.id_user2 FROM friends f1, friends f2 WHERE f2.id_user1 = f1.id_user2 AND f1.is_accepted AND NOT f1.is_blocked AND f2.is_accepted AND NOT f2.is_blocked
And I hope that you are not usind MySQL, because MySQL browses views very slowly.
source share