2010-08-04 22 views
2

這是我對奇怪的查詢。只有第一個和最後一個行應該承擔這樣的問題:MySQL COUNT結果在RoR中被解釋爲字符串而不是整數

SELECT s.parent_id AS id, COUNT(s.parent_id) as count 
    FROM items i 
    LEFT OUTER JOIN (SELECT item_id, user_id, MAX(created_at) as created_at 
    FROM item_views iv 
    WHERE iv.user_id = ? 
    GROUP BY item_id) AS v ON i.id = v.item_id 
    LEFT OUTER JOIN categories c ON c.id = i.category_id 
    INNER JOIN (SELECT node.id AS node_id, parent.title AS parent_title, parent.id AS parent_id 
    FROM categories AS node, categories AS parent 
    WHERE node.lft BETWEEN parent.lft AND parent.rgt) s ON s.node_id=i.category_id 
    WHERE (i.updated_at > v.created_at OR v.created_at IS NULL) 
    AND i.updated_at > ? 
    GROUP BY s.parent_id; 

當我把這個使用find_by_sql,該count列下的價值觀似乎像"1"而不是整數的字符串。當然,我可以很容易地打電話給to_i,但肯定這不是最好的解決方案。我懷疑我的查詢可能會導致MySQL返回字符串。

回答

2

您需要將返回的計數屬性轉換爲整數。

find_by_sql返回查詢中的屬性數組,Rails將這些屬性視爲字符串,並且由於count是查詢數組的屬性,所以它是返回中的字符串。看看這個確認方法的文檔:

http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class

相關問題