人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: tokyosmash
●カテゴリ:ウェブ制作
✍キーワード:PHP SELECT スマート ソート データ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● kurukuru-neko
●60ポイント ベストアンサー

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ですね。

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

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ