query("SELECT * FROM v_summary_transaksi_agen_bulanan"); $summary = $stmt->fetchAll(PDO::FETCH_ASSOC); // Ambil detail $stmt = $pdo->query("SELECT * FROM v_detail_agen_pascabayar"); $detail = $stmt->fetchAll(PDO::FETCH_ASSOC); // Ubah jadi keyed array function toKeyedArray($rows) { $out = []; foreach ($rows as $r) { $key = $r['id_agen_voucher'].'-'.$r['id_data_server'].'-'.$r['generate_time']; $out[$key] = $r; } return $out; } $summaryArr = toKeyedArray($summary); $detailArr = toKeyedArray($detail); // Gabungkan semua key $allKeys = array_unique(array_merge(array_keys($summaryArr), array_keys($detailArr))); $diffs = []; $same = []; foreach ($allKeys as $key) { $rowSummary = $summaryArr[$key] ?? null; $rowDetail = $detailArr[$key] ?? null; if (!$rowSummary || !$rowDetail) { $diffs[$key] = [ 'missing_in' => !$rowSummary ? 'summary' : 'detail' ]; continue; } // Bandingkan kolom satu per satu $rowDiff = []; foreach ($rowSummary as $col => $valSummary) { $valDetail = $rowDetail[$col] ?? null; // Normalisasi null jadi 0 $valSummaryNorm = ($valSummary === null || $valSummary === '') ? 0 : $valSummary; $valDetailNorm = ($valDetail === null || $valDetail === '') ? 0 : $valDetail; if (trim((string)$valSummaryNorm) !== trim((string)$valDetailNorm)) { $rowDiff[$col] = [ 'summary' => $valSummary, 'detail' => $valDetail ]; } } if ($rowDiff) { $diffs[$key] = $rowDiff; } else { $same[$key] = $rowSummary; } } // Hasil echo "

✅ Data Sama: ".count($same)."

"; // echo "
".json_encode($same, JSON_PRETTY_PRINT)."
"; echo "

⚠️ Data Berbeda / Hilang: ".count($diffs)."

"; echo "
".json_encode($diffs, JSON_PRETTY_PRINT)."
";