テーブル名 person
フィールド名 age
このようなテーブルがあります。
ageには以下のようなデータが入っています。
35
20
20
20
35
15
ageフィールドに入っているデータで一番多い文字列を取得するにはどうすればいいでしょうか?上記の例であれば「20」が該当します。
なんとか自力で書いてみようと、
$re = mysql_query("SELECT * FROM person");
while ($row = mysql_fetch_assoc($re)) {
$data[] = $row['age'];
}
//配列要素の出現回数を調べる
$count_re = array_count_values($data);
//要素でソート(降順)
arsort($count_re);
//要素とキーを逆に
$reverse = array_flip($count_re);
ここまで書いてみました。
print_rで$reverseを書き出すと
Array ( [3] => 20 [2] => 35 [1] => 15 )
となります。この配列の一番最初の要素を取り出せばいいのですが、出来ません。
色々と試しているのですが、取り出す際に配列が要素で勝手にソートされてしまうんです。一番最初を取り出そうとすると35が出てきたりと。
「PHPの配列はハッシュなので要素を数字順で並べ替えたりしない」 などと書いてあるのに。。と混乱気味です。
ここからどうすればいいでしょうか。
あるいはもっとスマートな方法があるのでしょうか。
PHPを使わない反則ですが
確認をSQLで実行してみてください。
select count(age) as count,age from person group by age order by count(age) desc
一番年齢の多い歳を取り出すには
select age from person group by age order by count(age) desc limit 1;
うーん・・なるほど。
http://q.hatena.ne.jp/1174134580
こちらで勉強した内容でした。
group byでまとめておいて、countですね。
明らかにこちらの方が簡単でスマートですよね。
ありがとうございます。