Tôi đang làm việc với một ứng dụng sử dụng phpActiveRecord
và mySQL để lấy dữ liệu từ mạng cảm biến và vẽ nó lên một số đồ thị flot.js trên máy khách.Trả về mỗi hàng thứ hai của truy vấn SQL
Có một số khung thời gian mà người dùng có thể chọn giữa để ảnh hưởng đến phạm vi dữ liệu mà biểu đồ hiển thị. 2hrs, 24hrs, 3 days and 1 week.
Cảm biến đăng lên cơ sở dữ liệu sau mỗi 60 giây, vì vậy khi vẽ biểu đồ, truy vấn sẽ kéo tất cả các hàng giữa now and DATE_SUB(CUR_DATE - INTERVAL ? DAY)
ở đâu? là 1, 3 hoặc 7, v.v.
Tuy nhiên điều này dẫn đến một số lượng lớn hàng được trả về (60,000 + for the full week!)
và gây ra sự chậm trễ lớn và lỗi máy chủ.
Tôi biết tôi chỉ có thể tăng bộ nhớ tối đa có sẵn cho các truy vấn trong tệp php.ini
, nhưng đây không phải là giải pháp tốt và không giải quyết được vấn đề về tốc độ.
Câu hỏi của tôi là, có cách nào tôi có thể dễ dàng chỉ chọn mọi hàng thứ hai hoặc thứ ba từ phạm vi ngày được yêu cầu tùy thuộc vào độ dài của khoảng thời gian người dùng muốn xem không?
Trong C hoặc Java tôi sẽ làm một cái gì đó giống như một modulo chọn để trả về hàng thay thế nhưng tôi không thể nghĩ ra một cách để làm điều này trong khung hiện hành.
Bất kỳ ý tưởng nào cũng sẽ được đánh giá cao. Cảm ơn.
http://stackoverflow.com/questions/858746/how-do-you-select-every-n-th-row-from-mysql –
Cảm ơn Josh, đây là những liên kết tuyệt vời, nhưng tiếc là cách ứng dụng được tạo có cấu trúc và được tạo động có nghĩa là việc sử dụng các biến người dùng về cơ bản nằm ngoài câu hỏi. Các truy vấn được quản lý bởi khung định tuyến slim.js và không được gọi trực tiếp bởi trang trình duyệt. Tôi đánh giá cao nó mặc dù! Cảm ơn. – bisslad
Nếu id của bạn tăng dần, bạn có thể sử dụng (thêm "lẻ" như hoặc là bội số của 4/8 và tương tự như câu lệnh WHERE) Ngoài ra: Bạn có cân nhắc sử dụng bộ nhớ đệm cho truy vấn của mình không?Thậm chí nếu bạn chỉ đơn giản là có thể sử dụng mysql_result_cache bạn sẽ tăng performace của bạn rất nhiều. –