Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails-为什么SQL返回不正确的结果?_Sql_Ruby On Rails_Ruby_Activerecord_Join - Fatal编程技术网

Rails-为什么SQL返回不正确的结果?

Rails-为什么SQL返回不正确的结果?,sql,ruby-on-rails,ruby,activerecord,join,Sql,Ruby On Rails,Ruby,Activerecord,Join,我有表项目,与此表关联的是表项目视图,结构如下: create_table "item_views", :force => true do |t| t.integer "item_id" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false end 在数据库上运行此AR查询时: current_user.items.joins(:item

我有表项目,与此表关联的是表项目视图,结构如下:

  create_table "item_views", :force => true do |t|
    t.integer  "item_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end
在数据库上运行此AR查询时:

current_user.items.joins(:item_views).where("item_views.created_at > ? AND item_views.created_at < ?", date_from, date_to+1.day).count
(id、项目id、创建时间、更新时间)

查询应返回值3,而不是返回值5——查询中的条件
“items”。“user\u id”=1

这怎么可能,还是我错过了什么


谢谢

我不明白为什么它会返回5<代码>4看起来是正确答案

SELECT COUNT(*)
FROM "items" INNER JOIN
     "item_views"
     ON "item_views"."item_id" = "items"."id"
WHERE "items"."user_id" = 1 AND
      (item_views.created_at > '2013-09-10' AND item_views.created_at < '2013-09-20');
更有效地表示为:

WHERE "items"."user_id" = 1 AND
      (item_views.created_at >= '2013-09-11' AND
       item_views.created_at < '2013-09-20'
      );
其中“项”。“用户id”=1和
(项目视图创建时间>='2013-09-11'和
项目视图创建于<'2013-09-20'
);

您确定没有更多的
1
行吗?在任何情况下,您都应该使用
select*
而不是
select count(*)
来运行查询,以查看它返回的内容。

您可以查看这5条记录是什么并发布它们的值吗?谢谢这是哪个数据库?你在哪个时区,数据库在哪个时区?
mu太短了
它是SQLite数据库,我不确定时区(它在我的本地主机上运行)。@muistooshort。我想这是可能的。问题中不包括实际的SQL create table语句。
SELECT COUNT(*)
FROM "items" INNER JOIN
     "item_views"
     ON "item_views"."item_id" = "items"."id"
WHERE "items"."user_id" = 1 AND
      (item_views.created_at > '2013-09-10' AND item_views.created_at < '2013-09-20');
WHERE "items"."user_id" = 1 AND
      (date(item_views.created_at) > '2013-09-10' AND
       date(item_views.created_at) < '2013-09-20'
      );
WHERE "items"."user_id" = 1 AND
      (item_views.created_at >= '2013-09-11' AND
       item_views.created_at < '2013-09-20'
      );