すべてのエントリにpools
apoolid
とaがあるというテーブルがありますcreateddate
。過去1週間(「これまでのところ」を含む)に毎日作成されたプールの数のリストを表示したい、ある種のダッシュボードを自分で作成しています。
私はこれまでに持っていますが、これは単に「8」を返します。これは実際には今日までに作成されたプールの数ですが、昨日、2日前、3日前などのプールの数を取得するにはどうすればよいですか?
$today= date('Y-m-d');
$weekago=date('Y-m-d', strtotime('-1 week'));
$stmt = $pdo->prepare("SELECT COUNT(*), poolid FROM pools WHERE `createddate` BETWEEN :weekago AND :today GROUP BY createddate ORDER BY createddate DESC");
$stmt->execute([':weekago' => $weekago, ':today' => $today]);
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
$numpoolssofartoday= $stmt->rowCount();
}
echo $numpoolssofartoday;
私がやりたいことをするために微調整して以下を手に入れました:
$stmt = $pdo->prepare("SELECT COUNT(*) as numpools, createddate FROM pools WHERE `createddate` BETWEEN :weekago AND :today GROUP BY createddate ORDER BY createddate DESC");
$stmt->execute([':weekago' => $weekago, ':today' => $today]);
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
$numpoolspastweek .= date('m-d',strtotime($row['createddate'])) . " " . $row['numpools']. "<br>";
}
その出力:
12-02 11
12-01 24
11-30 16
11-29 17
11-28 22
11-27 22
11-26 16
11-25 17
あなたの問題はあなたがあなたの出力を書き過ぎているということです:
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
$numpoolssofartoday= $stmt->rowCount();
}
echo $numpoolssofartoday;
あなたは今それを見ますか?$numpoolssofartoday
カウントの配列である必要があります。または、少なくとも、実行しようとしていることに応じて、ループ内から出力する必要があります。(たとえばテスト)。
また、rowCount
どのカウントを使用すると、クエリのすべての戻り行が返されます。クエリによって返されたカウントを使用する代わりに。
したがって、SQLを変更して合計を取得しやすくし、日付を追加します。複数の行をGROUP BY
句と組み合わせているため、poolidは正しくないため、関係ありません。
$sql = 'SELECT createddate, COUNT(poolid) AS total FROM ...';
// I'm to lazy for that looping, and been coding to much so I like to type as little as possible.
$stmt->fetchAll(PDO::FETCH_GROUP);
またFetch Group
、最初の列をグループ化したデータとして使用すると、このような配列が得られ、ループをスキップできます。
[
'2017-12-3' => ['total' => '3'],
'2017-12-2' => ['total' => '5']
]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加