そのすべてがクエリに含まれています。以下のクエリは、国ごとのカウント、ユーザータイプ、およびパッケージを含む結果を提供します。明らかに、ループを使用して12個のテーブルユニオンを作成できますが、読みやすくするために、合計で書き留めました。
また、UNIONだけでなくUNIONALLを使用することにも注意してください。UNIONを使用すると、重複する行は破棄されますが、テーブル1のカウントが特定のグループに対して100であり、テーブル2にも同じグループに対して100がある場合、100を2回返すため、合計は200になります。 UNIONを使用すると、100が1回返され、合計も明らかに100になります。
SELECT SUM(cnt) as total, `country`, `usertype`, `package` FROM
(
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table1 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table2 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table3 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table4 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table5 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table6 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table7 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table8 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table9 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table10 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table11 GROUP BY `country`, `usertype`, `package`
UNION ALL
SELECT COUNT(country) as cnt, `country`, `usertype`, `package` FROM table12 GROUP BY `country`, `usertype`, `package`
) temp
GROUP BY `country`, `usertype`, `package`
補足:あなたはする必要はありません
$stat_array[$country][$usertype][$package]= 1 + $stat_array[$country][$usertype][$package];
あなたはただすることができます:
$stat_array[$country][$usertype][$package]++;
そして最後に、あなたが持っているような多次元配列を使用する場合、内部的には多くのチェックを行う必要があります。簡単に言えば、最初に配列内の適切な国を見つけて、別の配列を作成します。その配列でユーザータイプを見つけてから、パッケージの3番目の配列で同じことを繰り返します。
$ country、$ usertype、および$ packageがすべて文字列である場合は、文字列を結合してそれを使用することができます。
$key = $country.'_'.$usertype.'_'.$package;
$stat_array[$key]++;
しかし、それはすべて、データを配列に格納した後のデータの処理方法に依存すると思います。合計数を出力するだけの場合は、配列は必要ありませんが、クエリ結果ループに直接出力します。