小编典典

SQL来自联系人的最新照片(按联系人分组)

sql

简而言之,我想按照登录后Flickr主页上显示的内容来完成某些工作。它显示了每个朋友的三张最新照片,这些照片按日期排序,但按朋友分组。

这里有一个更长的解释:例如,我有3个朋友:John,George和Andrea。我要提取的列表应如下所示:

George

  • Photo - 2010-05-18
  • Photo - 2010-05-18
  • Photo - 2010-05-12

John

  • Photo - 2010-05-17
  • Photo - 2010-05-14
  • Photo - 2010-05-12
    Andrea

  • Photo - 2010-05-15

  • Photo - 2010-05-15
  • Photo - 2010-05-15
    上传最新照片的朋友位于最上方,但其后的两个文件紧随其后。

我想从MySQL进行此操作,目前我到达了这里:

SELECT photos.user_id, photos.id, photos.date_uploaded
FROM photos
WHERE photos.user_id IN (SELECT user2_id
                         FROM user_relations
                         WHERE user1_id = 8)
ORDER BY date_uploaded DESC

user1_id = 8当前登录的用户在哪里user2_id,朋友的ID在哪里。该查询确实返回ID =
8的用户联系人按日期排序上传的最新文件。但是我想完成上面提到的分组和限制。

希望这是有道理的。先感谢您。


阅读 174

收藏
2021-04-22

共1个答案

小编典典

有时,达到目的的唯一方法是创建一段非常丑陋和令人发指的SQL,以至于执行多个查询的替代方法很有吸引力:-)

我只想查询一个朋友列表,然后为每个朋友获取三张最近的照片。就像是:

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

你不 具备 做它为一个查询任何比你只限于一个正则表达式匹配一个十恶不赦的模式。当然,成为“聪明人”会很好,但很少有必要。我更喜欢务实的方法。

2021-04-22