【问题标题】:Rails 3 - problem with a sql queryRails 3 - sql查询问题
【发布时间】:2011-09-21 09:42:26
【问题描述】:

我在 Rails 3 语法中有以下 sql 查询:

    variab = Model.joins(:photo).where('photos.user_id = ?', user).group('model.photo_id').count

Models 表中,我有这些数据:

+----+----------+----------+---------------------+----------+
| id | photo_id |  created_at          | updated_at         |
+----+----------+----------+---------------------+----------+
| 31 |      210 | 2011-09-16 14:38:22 | 2011-09-16 14:38:22 |
| 32 |      210 | 2011-09-16 14:38:22 | 2011-09-16 14:38:22 |
| 33 |      211 | 2011-09-16 15:03:26 | 2011-09-16 15:03:26 |
+----+----------+----------+---------------------+----------+

我尝试获取值 2 - 我需要获取唯一 photo_id 数据的计数。 但是如果我将使用上面的 sql 查询,那么输出是 ** 21022111** - 我不明白,这个数字是什么意思...我假设输出应该是 2,但是我不明白,为什么不...

如果有人能帮我解决这个问题,我会很高兴...非常感谢

【问题讨论】:

    标签: sql ruby-on-rails-3 join model group-by


    【解决方案1】:

    Active Record 正在返回 photo_id/count 对,即 photo_id 210 count 2,photo_id 211 count 1。

    如果您想计算给定用途的不同照片的数量,请尝试:

    Model.select(:photo_id).where(:user_id => user.id).count(:distinct => true)
    

    【讨论】:

    • 感谢史蒂夫的回复。这个例子为我生成了这个查询:SELECT COUNT(DISTINCT model.id) FROM model` LEFT OUTER JOIN photos ON photos.id = model.photo_id WHERE (user_id = 2)` -这在我的脚本中给出了结果 0,但在 mysql 的终端中给出了数字 3。但正确的输出应该是 2。
    • 也许我误解了你的模型。 user_id 在模型或照片表上吗?如果它在照片表上,那么答案中的 where 子句是错误的。
    • 如果 user_id 键在照片表上,那么你需要这样做: Model.select(:photo_id).joins(:photo).where('photos.user_id = ? ', user).count(:distinct => true)
    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 2011-04-28
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2010-12-20
    相关资源
    最近更新 更多