• ベストアンサー

MySQL接続・カテゴリわけ

MySQLで下記のようににテーブルを作成しました。 +----+------+------+-------+ | id | name | age | add | +----+-------+-----+-------+ | 01 | 名前1 | 20 | 住所1 | | 02 | 名前2 | 20 | 住所2 | | 03 | 名前3 | 35 | 住所3 | | 04 | 名前4 | 21 | 住所4 | | 05 | 名前5 | 21 | 住所5 | | 06 | 名前6 | 20 | 住所6 | +----+-------+-----+-------+ これをPHPで接続し、年齢別で整理したいのですが、 どのようにしたらいいのかわかりません。 現在は下記のように記述し、SQLのデータを配列に入れ、 その配列を分解して年齢別に分ける・・・といったやり方を行っていますが、 これだとMySQLの意味がないような気がします。 もっと簡単に年齢別でわけることは可能でしょうか。 $rs = mysql_query("select * from test order by age" , $conn); $i = 0; while($rec = mysql_fetch_array($rs)){ $cate_only[] = "$rec[age]"; //年齢のみの配列を作成 $arr_cate_only = array_unique($cate_only); //年齢のみの配列から同じものを削除 $arr_cate_only = array_values($arr_cate_only); //年齢のみの配列を再度作成 $count_cate = count($arr_cate_only); //年齢が何個あるかカウント ・ ・ ・ } 具体的には下記のような感じでページを表示したいです。 年齢別で表示しています。 年齢「20」 ┣名前1 ┣名前2 ┗名前6 年齢「21」 ┣名前4 ┗名前5 年齢「35」 ┗名前3

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

while($rec = mysql_fetch_array($rs)){ $data[$rec["age"]][]=$rec["id"]; } って処理をいれてみては?

hukazuo
質問者

お礼

ありがとうございました。 できました。

その他の回答 (1)

回答No.2

group by で with rollup 指定すると、より編集しやすい形で検索できるかも知れません。 以下、SQL例です。どんな検索結果が得られるか、実際に見てみてください。なお、この小細工(合計の行が返却される順序を変える)は、データ件数が多いとオーバーヘッドになるので、性能重視なら現状の考え方通り、PHP側でやった方がいいです。 -- 返却順を小細工。 -- `age`の値がnullの行(総合計)を、一番最後に返却させる -- `name`の値がnullの行(年齢毎の合計)を、各年齢の先頭に返却させる select * from ( select `age`,`name`,count(*) as cnt from `test` group by `age`,`name` with rollup ) as x order by `age` is null -- 総合計を最終行にする。 ,`age` ,`name` is not null -- 各年齢別の合計は、各年齢の先頭行にする ;

hukazuo
質問者

お礼

ありがとうございました。 この方法でもできました。

関連するQ&A