みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2009-12-04 12:30:37

QNo.5497148

すぐに回答ほしいです

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

while($rec = mysql_fetch_array($rs)){
$data[$rec["age"]][]=$rec["id"];
}

って処理をいれてみては?

投稿日時 - 2009-12-04 13:02:33

お礼

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

投稿日時 - 2009-12-16 22:40:23

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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 -- 各年齢別の合計は、各年齢の先頭行にする
;

投稿日時 - 2009-12-04 14:20:25

お礼

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

投稿日時 - 2009-12-16 22:42:01

あなたにオススメの質問