私は電話でMySQLテーブルを持っています。すべての行は1回の通話を意味します。 列は以下のとおりです。MySQLデータ - 電話通話回数を同時にカウントします
start_time
start_date
duration
は私が同時に呼ばれる最大の電話を取得する必要があります。それは電話交換のためのものです。
私の解決策は、2つのタイムスタンプ列timestamp_start
とtimestamp_end
を作成することです。それから私は一日することにより、第2、日によってループ秒を実行して、何かのようにMySQLを尋ねる:
SELECT Count(*) FROM tbl WHERE start_date IN (thisday, secondday) AND "this_second_checking" BETWEEN timestamp_start AND timestamp_end;
それはかなり遅いです。 もっと良い解決策はありますか?ありがとうございました!
EDIT - 私はこの解決方法を使用し、私に適切な結果をもたらします。 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;
実行中の電話番号を確認する必要があります。毎秒チェックする必要はありません。 – Blem
start_date、timestamp_start、timestamp_endにインデックスがありますか? – pgl
はい、私はインデックスを持っています。それは大きな改善でした。 Blem:これ以上、感謝します! – Xdg