A veces, la única forma de lograr un fin es crear una pieza de SQL tan fea y atroz, que la alternativa de hacer múltiples consultas se vuelve atractiva :-)
Solo haría una consulta para obtener una lista de sus amigos y luego, para cada amigo, obtendría las tres fotos más recientes. 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
No tienes para hacerlo como una consulta más de lo que está limitado a una expresión regular para hacer coincidir un patrón atroz. Claro que sería bueno ser "inteligente", pero rara vez es necesario. Prefiero un enfoque pragmático.