MySQL4.1 PHPに関する質問です。


テーブル名 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の配列はハッシュなので要素を数字順で並べ替えたりしない」 などと書いてあるのに。。と混乱気味です。

ここからどうすればいいでしょうか。
あるいはもっとスマートな方法があるのでしょうか。

回答の条件
  • 1人2回まで
  • 登録:2007/03/23 20:38:38
  • 終了:2007/03/28 10:28:49

ベストアンサー

id:kurukuru-neko No.1

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/03/23 21:03:32

ポイント60pt

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;

id:tokyosmash

うーん・・なるほど。

http://q.hatena.ne.jp/1174134580

こちらで勉強した内容でした。

group byでまとめておいて、countですね。

明らかにこちらの方が簡単でスマートですよね。

ありがとうございます。

2007/03/23 21:12:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません