代码之家  ›  专栏  ›  技术社区  ›  janosrusiczki

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

  •  1
  • janosrusiczki  · 技术社区  · 14 年前

    简言之,这个问题是我想完成一些事情,沿着什么是在Flickr的主页上可见一旦你登录。它显示了每个朋友的三张最新照片,按日期排序,但按朋友分组。

    这里有一个较长的解释:例如,我有3个朋友:约翰、乔治和安德里亚。我要提取的列表应如下所示:

    乔治

    • 照片-2010-05-18
    • 照片-2010-05-18
    • 照片-2010-05-12

    约翰

    • 照片-2010-05-17
    • 照片-2010-05-14
    • 照片-2010-05-12

    安德莉亚

    • 照片-2010-05-15
    • 照片-2010-05-15
    • 照片-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=8、按日期排序的用户联系人上载的最新文件。不过,我想完成上面提到的分组和限制。

    希望这是合理的。提前谢谢。

    1 回复  |  直到 14 年前
        1
  •  3
  •   paxdiablo    14 年前

    有时,实现一个目的的唯一方法是创建一个如此丑陋和令人发指的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
    

    你不 要将它作为一个查询来执行,就要比只使用一个正则表达式来匹配一个糟糕的模式还要简单。当然,“聪明”是件好事,但很少有必要。我更喜欢务实的方法。