我有三个postgres表:用户、文件和点赞。
users表与files表具有一对多关系。
files表与likes表具有一对多的关系。
我的应用程序有一个包含两个部分的提要:“社区”和“喜欢”。“社区”部分由所有公共用户文件组成,“喜欢”部分由用户喜欢的所有文件组成。加载提要后,我获取了两个部分的文件,最后得到了每个部分的字典数组。我的查询如下所示:
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是否也在“喜欢”数组中的最佳方法是什么,以便我可以更新按钮?
“社区”和“喜欢”数组由如下字典组成:
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]}发布于 2016-07-30 07:02:09
在第一个查询中检查liked:
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语法,多行字符串,通过驱动程序传递参数,而不是字符串插值。
https://stackoverflow.com/questions/38667931
复制相似问题