Às vezes, a única maneira de chegar a um fim é criar um pedaço de SQL tão feio e hediondo, que a alternativa de fazer várias consultas se torna atraente :-)
Eu faria apenas uma consulta para obter uma lista de seus amigos e, para cada amigo, obteria as três fotos mais recentes. Algo como:
friend_list = sqlexec "select user2_id from relations where user1_id = "
+ current_user_id
photolist = []
for friend in friend_list:
photolist += sqlexec "select user_id, id, date_uploaded from photos"
+ " where user_id = "
+ friend.get("user2_id")
+ " order by date_uploaded desc fetch first 3 rows only"
# Now do something with photolist
Você não tem para fazer isso como uma consulta mais do que você está limitado a uma expressão regular para corresponder a um padrão hediondo. Claro que seria bom ser "inteligente", mas raramente é necessário. Prefiro uma abordagem pragmática.