首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较来自一个获取请求的数据与来自另一个获取请求的数据

比较来自一个获取请求的数据与来自另一个获取请求的数据
EN

Stack Overflow用户
提问于 2016-07-30 05:45:37
回答 1查看 36关注 0票数 0

我有三个postgres表:用户、文件和点赞。

users表与files表具有一对多关系。

files表与likes表具有一对多的关系。

我的应用程序有一个包含两个部分的提要:“社区”和“喜欢”。“社区”部分由所有公共用户文件组成,“喜欢”部分由用户喜欢的所有文件组成。加载提要后,我获取了两个部分的文件,最后得到了每个部分的字典数组。我的查询如下所示:

代码语言:javascript
复制
cur.execute('SELECT f.*, u.username from files as f, users as u '
            'where u.id = %i AND f.user_id = %i ORDER BY f.id DESC' %
            (user.id, user.id))

cur.execute('SELECT f.*, u.username from files as f, users as u, likes as l '
            'where l.user_id = %i AND l.file_id = f.id AND f.share = True AND '
            'u.id = f.user_id ORDER BY f.id DESC' % (user.id))

我的“社区”提要有一个“喜欢”按钮,当该文件被点赞时,该按钮会变为“喜欢”。由于我有一个用于“社区”文件的数组和一个“喜欢”文件的数组,那么检查“社区”数组中的文件ID是否也在“喜欢”数组中的最佳方法是什么,以便我可以更新按钮?

“社区”和“喜欢”数组由如下字典组成:

代码语言:javascript
复制
community_files_dict = {'file_id': file[0], 'user_id': file[1], 'title': file[2],
                        'date': date_final, 'shared': file[4], 'username': file[5]}

liked_files_dict = {'file_id': file[0], 'user_id': file[1], 'title': file[2],
                    'date': date_final, 'shared': file[4], 'username': file[5]}
EN

回答 1

Stack Overflow用户

发布于 2016-07-30 07:02:09

在第一个查询中检查liked:

代码语言:javascript
复制
cur.execute('''
    select f.*, u.username, l.user_id is not null as liked
    from
        files f
        inner join
        users u on u.id = f.user_id
        left join
        likes l on l.user_id = u.id and f.share = true
    where u.id = %s
    order by f.id desc
''', (user.id,))

改进:join语法,多行字符串,通过驱动程序传递参数,而不是字符串插值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38667931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档