Tôi đang sử dụng đá quý ahoy để theo dõi lượt truy cập và groupdate để hiển thị thống kê hàng ngày.vấn đề gem groupdate với 2 múi giờ cho cùng một cột
Để đếm thăm hàng ngày tôi sử dụng truy vấn này trong Visit
mô hình:
Visit.group_by_day(:started_at).order('started_at').count
Nó hoạt động tốt cho đến ngày cuối cùng 18, khi múi giờ của tôi đã thay đổi từ BRT (-03: 00) để BRST (-02: 00).
Bây giờ, các truy vấn trên trả về 0
thăm đếm cho mỗi ngày sau 18:
2.1.3 :026 > puts Visit.group_by_day(:started_at).order('started_at desc').limit(10).count.to_yaml
(0.3ms) SELECT COUNT(*) AS count_all, DATE_ADD(CONVERT_TZ(DATE_FORMAT(CONVERT_TZ(DATE_SUB(started_at, INTERVAL 0 HOUR), '+00:00', 'America/Sao_Paulo'), '%Y-%m-%d 00:00:00'), 'America/Sao_Paulo', '+00:00'), INTERVAL 0 HOUR) AS day FROM `visits` WHERE (started_at IS NOT NULL) GROUP BY DATE_ADD(CONVERT_TZ(DATE_FORMAT(CONVERT_TZ(DATE_SUB(started_at, INTERVAL 0 HOUR), '+00:00', 'America/Sao_Paulo'), '%Y-%m-%d 00:00:00'), 'America/Sao_Paulo', '+00:00'), INTERVAL 0 HOUR) ORDER BY started_at desc LIMIT 10
---
2015-10-14 03:00:00.000000000 Z: 158
2015-10-15 03:00:00.000000000 Z: 127
2015-10-16 03:00:00.000000000 Z: 101
2015-10-17 03:00:00.000000000 Z: 112
2015-10-18 03:00:00.000000000 Z: 111
2015-10-19 03:00:00.000000000 Z: 0
2015-10-20 03:00:00.000000000 Z: 0
2015-10-21 03:00:00.000000000 Z: 0
2015-10-22 03:00:00.000000000 Z: 0
Nhưng, nếu tôi chỉ chọn 5 ngày qua (mà là tất cả trong múi giờ BRST), nó hoạt động:
2.1.3 :027 > puts Visit.group_by_day(:started_at).order('started_at desc').limit(5).count.to_yaml
(0.3ms) SELECT COUNT(*) AS count_all, DATE_ADD(CONVERT_TZ(DATE_FORMAT(CONVERT_TZ(DATE_SUB(started_at, INTERVAL 0 HOUR), '+00:00', 'America/Sao_Paulo'), '%Y-%m-%d 00:00:00'), 'America/Sao_Paulo', '+00:00'), INTERVAL 0 HOUR) AS day FROM `visits` WHERE (started_at IS NOT NULL) GROUP BY DATE_ADD(CONVERT_TZ(DATE_FORMAT(CONVERT_TZ(DATE_SUB(started_at, INTERVAL 0 HOUR), '+00:00', 'America/Sao_Paulo'), '%Y-%m-%d 00:00:00'), 'America/Sao_Paulo', '+00:00'), INTERVAL 0 HOUR) ORDER BY started_at desc LIMIT 5
---
2015-10-19 02:00:00.000000000 Z: 85
2015-10-20 02:00:00.000000000 Z: 72
2015-10-21 02:00:00.000000000 Z: 84
2015-10-22 02:00:00.000000000 Z: 80
2015-10-23 02:00:00.000000000 Z: 21
Tôi đã thực hiện 2 truy vấn này trực tiếp trong máy chủ mysql và cả hai trả về kết quả chính xác.
tức là khi truy vấn bao gồm các bản ghi với 2 múi giờ khác nhau, groupdate
không thể đếm các bản ghi của lần cuối cùng.
Tôi muốn đảm bảo đây là lỗi đá quý groupdate. Hoặc tôi thiếu một cái gì đó?
Tôi lấy nó bạn thấy cái này? https://github.com/ankane/groupdate#time-zones – Anthony
Có @Anthony, múi giờ được định cấu hình chính xác và mọi thứ hoạt động trừ khi 'SELECT' truy lục các bản ghi với hai múi giờ khác nhau. – Rodrigo