2010-08-04 75 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

相关问题