'-', 'count_invalidated_archives' => '-', 'count_temporary_archives' => '-', 'count_error_archives' => '-', 'count_segment_archives' => '-', 'count_numeric_rows' => '-', ); $tableDate = str_replace("`", "", $tableDate); // for sanity $numericTable = Common::prefixTable("archive_numeric_$tableDate"); $blobTable = Common::prefixTable("archive_blob_$tableDate"); // query numeric table $sql = "SELECT CONCAT_WS('.', idsite, date1, date2, period) AS label, SUM(CASE WHEN name LIKE 'done%' THEN 1 ELSE 0 END) AS count_archives, SUM(CASE WHEN name LIKE 'done%' AND value = ? THEN 1 ELSE 0 END) AS count_invalidated_archives, SUM(CASE WHEN name LIKE 'done%' AND value = ? THEN 1 ELSE 0 END) AS count_temporary_archives, SUM(CASE WHEN name LIKE 'done%' AND value = ? THEN 1 ELSE 0 END) AS count_error_archives, SUM(CASE WHEN name LIKE 'done%' AND CHAR_LENGTH(name) > 32 THEN 1 ELSE 0 END) AS count_segment_archives, SUM(CASE WHEN name NOT LIKE 'done%' THEN 1 ELSE 0 END) AS count_numeric_rows, 0 AS count_blob_rows FROM `$numericTable` GROUP BY idsite, date1, date2, period"; $rows = Db::fetchAll($sql, array(ArchiveWriter::DONE_INVALIDATED, ArchiveWriter::DONE_OK_TEMPORARY, ArchiveWriter::DONE_ERROR)); // index result $result = array(); foreach ($rows as $row) { $result[$row['label']] = $row; } // query blob table & manually merge results (no FULL OUTER JOIN in mysql) $sql = "SELECT CONCAT_WS('.', idsite, date1, date2, period) AS label, COUNT(*) AS count_blob_rows, SUM(OCTET_LENGTH(value)) AS sum_blob_length FROM `$blobTable` GROUP BY idsite, date1, date1, period"; foreach (Db::fetchAll($sql) as $blobStatsRow) { $label = $blobStatsRow['label']; if (isset($result[$label])) { $result[$label] = array_merge($result[$label], $blobStatsRow); } else { $result[$label] = $blobStatsRow + $numericQueryEmptyRow; } } return $result; } }