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/28 10:28:49
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kurukuru-neko No.1

回答回数1844ベストアンサー獲得回数155

ポイント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

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

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

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

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

回答リクエストを送信したユーザーはいません