私はMySQLとPHPの初心者です。forloopのMySQLでデータベースからデータを取得
日付範囲(1日目から2日目、2日目から3日目など)にデータを取得するコードは次のとおりです。
function getData($query) {
global $connect;
$result = mysqli_query($connect, $query);
if (!$result) {
echo 'MySQL Error: '.mysqli_error($connect);
die();
}
return mysqli_fetch_assoc($result);
}
$dayZero = date_create('2017-01-21');
$dayToday = date_create('Y-m-d');
$diff = date_diff($dayZero, $dayToday)->format('%a');
for ($i = 0; $i < $diff; ++$i) {
$start[$i] = date('Y-m-d', date_format($dayZero, 'U') + (24*60*60)*($i));
$end[$i] = date('Y-m-d', date_format($dayZero, 'U') + (24*60*60)*($i+1));
$days[$i] = getData('SELECT count(*) AS "b" FROM `table_name` WHERE `timestamp` BETWEEN "'.$start[$i].'" AND "'.$end[$i].'"')['b'];
}
コードは期待通りに機能しますが、動作は非常に遅いです。私の推測は、ループするたびにデータベースをチェックする必要があるからです。
もっと速く走らせる方法はありますか?または私は作ることができる最適化はありますか?
タイムスタンプの計算をスキップして、 'timestamp BETWEEN '2017-01-21' AND '2017-01-22' '(単なる例)を使用することができます。また、クエリを再確認してください。有効に見えません。 – Raptor
指定した期間内に行数を取得しようとしていますか? –
@ Marc-AntoineParent私は2017-01-21から始まる毎日の行の数を取得しようとしています。 –