アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

while($rec = mysql_fetch_array($rs)){


$data[$rec["age"]][]=$rec["id"];
}

って処理をいれてみては?
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/16 22:40

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 -- 各年齢別の合計は、各年齢の先頭行にする
;
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/16 22:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!