2016-07-29 39 views
0

我有三個postgres表:用戶,文件和喜歡。比較來自一個提取請求的數據

users表與文件表具有一對多的關係。
files表與關係表有一對多的關係。

我的應用程序有兩個部分:「社區」和「喜歡」的飼料。 「社區」部分由所有公共用戶文件組成,「喜歡」部分由用戶喜歡的所有文件組成。在加載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)) 

我的「社區」飼料有一個類似的按鈕,切換到「喜歡」時,該文件已被喜歡。由於我有一個「社區」文件和一個「喜歡」文件數組的數組,所以我最好的方法是檢查「社區」數組中的文件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

你能發表由兩個不同的查詢返回的字典的例子嗎? – mitoRibo

+0

@ rbierman用字典更新 – Brosef

回答

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語法,多線串,通過驅動程序傳遞參數而不是字符串插值。