prepare('SELECT HOUR(event_time) as hour, COUNT(*) as count FROM entry_events WHERE DATE(event_time) = ? GROUP BY HOUR(event_time) ORDER BY hour'); $stmt->execute([$date]); $entryHours = $stmt->fetchAll(); $entryTotal = 0; foreach ($entryHours as $row) { $entryTotal += $row['count']; } echo " entry_events: $entryTotal total events\n"; if (!empty($entryHours)) { echo " Hours with data: " . count($entryHours) . "\n"; } // Check hourly_summary $stmt = $db->prepare('SELECT summary_hour, SUM(total_count) as total_count, SUM(total_amount) as total_amount FROM hourly_summary WHERE summary_date = ? GROUP BY summary_hour ORDER BY summary_hour'); $stmt->execute([$date]); $summaryHours = $stmt->fetchAll(); $summaryTotal = 0; foreach ($summaryHours as $row) { $summaryTotal += $row['total_count']; } echo " hourly_summary: $summaryTotal total\n"; if (!empty($summaryHours)) { echo " Hours with data: " . count($summaryHours) . "\n"; } else { echo " ⚠️ No hourly_summary data!\n"; echo " Run: php bin/hourly_summary.php $date\n"; } if ($entryTotal > 0 && $summaryTotal == 0) { echo " ❌ PROBLEM: entry_events has data but hourly_summary is empty!\n"; } elseif ($entryTotal > 0 && $summaryTotal > 0 && $entryTotal != $summaryTotal) { echo " ⚠️ WARNING: Count mismatch! entry_events: $entryTotal, hourly_summary: $summaryTotal\n"; } elseif ($entryTotal > 0 && $summaryTotal > 0) { echo " ✓ OK: Counts match\n"; } echo "\n"; }