2012-02-02 116 views
2

我試圖讓所有沒有內容(視頻和照片)的藝術家上傳。我的查詢缺少照片部分。到目前爲止,我有:如何讓所有藝術家沒有視頻和照片?

User.where(:is_artist => true, :is_verified => true).joins('LEFT OUTER JOIN videos ON videos.user_id = users.id').where('videos.id IS NULL').count 
(8.7ms) SELECT COUNT(*) FROM `users` LEFT OUTER JOIN videos ON videos.user_id = users.id WHERE `users`.`is_artist` = 1 AND `users`.`is_verified` = 1 AND (videos.id IS NOT NULL) 

然而,一些與上述查詢稍有錯誤的,因爲:

User.where(:is_artist => true, :is_verified => true).count 

返回:1000。第一個查詢返回:3000

任何幫助將是讚賞。

+0

只是好奇,不'標題中的update_all'與這個問題有什麼關係?關於查詢,在第一種情況下,您執行左外連接,這意味着每個用戶您獲得的行數與他擁有的視頻數量一樣多。因此計數結果的差異。如果你想讓用戶沒有視頻,它應該是'videos.id IS NULL',而不是(沒有'NOT')。 – 2012-02-02 12:26:28

+0

對不起,改了它 – 2012-02-02 12:30:15

+0

很好的嘗試,但現在標題說'有視頻和照片的藝術家',而你在談論'沒有內容的藝術家'的問題。你需要哪一個? – 2012-02-02 12:32:59

回答

0

你可以得到所有經過驗證的藝術家不一樣,視頻:

User.joins('LEFT OUTER JOIN videos ON videos.user_id = users.id'). 
    where(:is_artist => true, :is_verified => true, 'videos.id' => nil) 
+0

照片部分怎麼樣?查詢需要返回所有沒有照片和視頻的藝術家 – 2012-02-02 19:34:47

+0

爲無照片ID添加另一個左外部連接和另一個條件。儘管如此,這可能會導致相當大的查詢。 – 2012-02-02 19:46:21

+0

此外,您的查詢返回與我的查詢相同的結果集,在我的初始帖子中.. – 2012-02-02 20:04:14

0

這可以簡單地通過運行

User.where(:is_artist => true, :is_verified => true).includes(:videos).count 

來實現,如果用戶有視頻

關係
+1

這將返回所有用戶(滿足條件),無論他們是否有任何視頻。 – 2012-02-02 12:40:52

+0

照片部分怎麼樣? – 2012-02-02 12:42:59

相關問題