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'
);