我有三个postgres表:用户,文件等。
users表与files表有一对多的关系 files表与likes表有一对多的关系。
我的应用程序有一个包含两个部分的提要:“社区”和“喜欢”。 “社区”部分包含所有公共用户文件,“赞”部分包含用户喜欢的所有文件。在加载feed时,我获取了两个部分的文件,最后我得到了每个部分的字典数组。我的查询看起来像这样:
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))
我的“社区”Feed有一个类似的按钮,在喜欢该文件时会更改为“已赞”。由于我有一个“社区”文件数组和一个“喜欢”文件数组,检查“社区”数组中的文件ID是否也在“喜欢”数组中的最佳方法是什么,所以我可以更新按钮?
“社区”和“喜欢”数组由以下字典组成:
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]}
答案 0 :(得分:0)
在第一个查询中检查所需的内容:
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
语法,多行字符串,通过驱动程序而不是字符串插值传递参数。