Tôi có bảng MySQL có cuộc gọi điện thoại. Mỗi hàng có nghĩa là một cuộc gọi điện thoại. Cột là:Dữ liệu MySQL - Đếm số cuộc gọi điện thoại cùng một lúc
start_time
start_date
duration
Tôi cần nhận cuộc gọi điện thoại tối đa được gọi cùng một lúc. Đó là do kích thước trao đổi qua điện thoại.
Giải pháp của tôi là tạo hai cột dấu thời gian timestamp_start
và timestamp_end
. Sau đó, tôi chạy một vòng lặp thứ hai bằng giây, từng ngày và yêu cầu MySQL cái gì đó như:
SELECT Count(*) FROM tbl WHERE start_date IN (thisday, secondday) AND "this_second_checking" BETWEEN timestamp_start AND timestamp_end;
Đó là khá chậm. Có giải pháp nào tốt hơn không? Cảm ơn bạn!
EDIT - Tôi sử dụng giải pháp này và nó mang lại cho tôi kết quả phù hợp. Có sử dụng lớp SQL dibi - http://dibiphp.com/cs/quick-start.
$starts = dibi::query("SELECT ts_start, ts_end FROM " . $tblname . " GROUP BY ts_start");
if(count($starts) > 0):
foreach ($starts as $row) {
if(isset($result)) unset($result);
$result = dibi::query('SELECT Count(*) FROM ' . $tblname . ' WHERE "'.$row->ts_start.'" BETWEEN ts_start AND ts_end');
$num = $result->fetchSingle();
if($total_max < $num):
$total_max = $num;
endif;
}
endif;
echo "Total MAX: " . $total_max;
bạn chỉ cần kiểm tra thời điểm cuộc gọi mới được bắt đầu cho số lượng cuộc gọi đang chạy, không cần kiểm tra từng giây – Blem
Bạn có chỉ mục trên start_date, timestamp_start và timestamp_end không? – pgl
Có, tôi có chỉ mục. Đó là một cải tiến lớn. Blem: Tôi nghĩ rằng nó hơn, cảm ơn! – Xdg