0

在一個控制器中,我有一個用sub select進行計數的活動查詢,並且希望使用count來進一步限制返回的行。如評論= 0Mysql2 ::錯誤:在'having子句'中的未知列'註釋'

我使用的是因爲這是我可以得到這個工作在MySQL提示符來測試它的唯一方法。檢查where子句中的聚合函數不起作用。

任何想法?

最終,我的目標是將此調整爲一個銷燬語句以刪除符合該條件的值,但我甚至不知道如何去做。所以這意味着只刪除hbookmarks表中的行(不是書籤表)。從控制器

代碼:

Hbookmark.joins("INNER JOIN bookmarks ON hbookmarks.bookmark_id = bookmarks.id") 
     .select("bookmarks.short_name, hbookmarks.id, (select count(*) from clickcomments where clickcomments.click_id = hbookmarks.id) as comments") 
     .where("bookmarks.user_id = ? AND hbookmarks.create_date < DATE_SUB(NOW(), INTERVAL 1 YEAR)", current_user.id) 
     .having("comments = 0") 
     .order("hbookmarks.create_date desc") 
+0

完全不酷,但原始的SQL工作。但不想使用它。而是做積極的記錄。從選項b中選擇b.short_name,h.create_date,h.id,(從clickcomments c中選擇count(*),其中c.click_id = h.id)作爲commentcount,hbookmarks h其中b.user_id =#{ current_user.id}和h.bookmark_id = b.id和h.create_date kram1021

+0

對不起,替換commentcount的評論,更清晰 – kram1021

+0

有人清理了代碼,但有一個調試線,我會解釋很重要。 'logger.info(「清除大小沒有評論:」+ @ topurge.size.to_s)' – kram1021

回答

0

最終它在記錄器語句中的ActiveRecord上的size命令上失敗。

logger.info("purge size with no comments: " + @topurge.size.to_s) 

使用.length不會導致錯誤,其餘查詢工作正常。我曾經評論過.length。

正確的方法是:

logger.info("purge size with no comments: " + @topurge.length.to_s) 

至於我的其他問題,該怎麼做刪除,即在ActiveRecord的直線前進,destroy_all。現在我的數據庫中有幾個用戶擁有1000行,所以在那種情況下,我進入了mysql,並執行了快速執行的手術刪除操作,而這種activerecord操作很慢。有人對Rails內部的性能方式有更好,更快,更少的影響,請讓我知道。

# remove the old clicks that do not have comments - we'll keep those for search look up 
@topurge.destroy_all 
0

我以前也有類似的問題,我已經用實際的SQL片段替換comments解決它,你用它來定義它:

having("(select count(*) from clickcomments where clickcomments.click_id = hbookmarks.id) = 0") 
+0

嗨,謝謝。當我這樣做時,hbookmarks.id未知。「(clickcomments.click_id = hbookmarks.id)中選擇count(*)from clickcomments.click_id = hbookmarks.id)導致Mysql2 :: Error:Unknown列'hw.hbookmarks.id'in'where條款' – kram1021

相關問題