- ベストアンサー
MySQLでグループごとに見出しをつける方法
- MySQLのmysql_fetch_array関数を使用して、グループごとに見出しをつける方法を紹介します。
- 指定したテーブルからデータを取得し、グループごとに見出しを表示するコード例を示します。
- この方法を使えば、野菜、くだもの、お菓子などのグループごとにデータを表示することができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
whileの前と後ろをtableで囲む形にすればできます。 5行追加置換と前の回答修正1行。 $sql = "select * from eat ORDER BY groupid,eatid"; // 修正。順番を守らせるため $result = mysql_query($sql); $rows = mysql_num_rows($result); $before_groupid = 0; $current_groupid = 0; echo "<table>"; // 追加 while($row = mysql_fetch_array($result)){ $current_groupid = $row["groupid"]; if($current_groupid > $before_groupid){ echo "<tr><td>■".$row["group"]."関連</td></tr>"; // 入れ替え } $before_groupid = $current_groupid; echo "<tr><td>"; // 入れ替え echo $row["eat"]; echo "</td></tr>"; // 入れ替え } echo "</table>"; // 追加
その他の回答 (3)
- magicalpass
- ベストアンサー率58% (378/648)
データがどんな順番に並んでても構わないはず。 class CGroup { public $group; public $eat = array(); } $sql = "select * from eat"; $result = mysql_query($sql); $group = array(); while($row = mysql_fetch_array($result)){ if (!isset($group["$row[groupid]"])) { $group["$row[groupid]"] = new CGroup; $group["$row[groupid]"]->group = $row["group"]; } $group["$row[groupid]"]->eat[] = $row["eat"]; } foreach($group as $elem) { echo "<p>"; echo "<br>■".($elem->group)."関連<br><br>"; foreach($elem->eat as $item) { echo $item."<br>"; } echo "</p>"; } 手元に環境がないので動作確認はしていません。
お礼
ご回答ありがとうございます! ご丁寧にご回答いただきましてありがとうございました!! ただ、自分的には少し応用していろいろ使おうと思っていたので、 echo "<p>"; echo $eat; echo "</p>"; 的なもので作っていただきたかったです。。 (ここは完全に私のご説明不足で、magicalpassさんには一切の非はございません!!) ありがとうございました!!
- honoka-cha
- ベストアンサー率54% (40/73)
7行追加でOK。 $sql = "select * from eat"; $result = mysql_query($sql); $rows = mysql_num_rows($result); $before_groupid = 0; // 追加 $current_groupid = 0; // 追加 while($row = mysql_fetch_array($result)){ $current_groupid = $row["groupid"]; // 追加 if($current_groupid > $before_groupid){ // 追加 もっとも重要な行 echo "<h1>■".$row["group"]."関連</h1>"; // 追加 } // 追加 $before_groupid = $current_groupid; // 追加 echo "<p>"; echo $row["eat"]; echo "</p>"; }
お礼
ご回答ありがとうございます!! 7行追加でOK。というモチベーションの上がるキャッチに誘われて一番に試させていただきました!! 結果、無事にできました!!本当にありがとうございます!! また、重ねての質問で恐縮なのですが、 echo "<p>"; echo $row["eat"]; echo "</p>"; の部分を本当は echo "<table>"; echo "<tr><td>"; echo $eat; echo "</tr></td>"; echo "</table>"; で組んでいまして。。 これはどうにもなりませんでしょうか? 本当はもう少し複雑なデザインにしていて、テーブルで作りたいと思っておりまして。。 もしテーブルでできないようでしたら、できないよばか!とののしってください!!
- duron
- ベストアンサー率77% (73/94)
キレイなやり方じゃないかもしれませんが・・・ 私はこういうとき、一度二次元配列($a[groupid][eatid]=eat)に取り込んでから出力するようにしてます。 $sql = "select * from eat"; $result = mysql_query($sql); $rows = mysql_num_rows($result); $grouplist=array(); $eatlist=array(); // 二次元配列の生成(ついでにグループ名称のリストも生成) while($row = mysql_fetch_array($result)){ if(!isset($grouplist[$row["groupid"]])) { $grouplist[$row["groupid"]]=$row["group"]; } $eatlist[$row["groupid"]][$row["eatid"]]=$row["eat"]; } // リストの出力 foreach($eatlist as $key1 => $subeatlist) { echo "■".$grouplist[$key1]."関連<br>"); foreach($subeatlist as $key2 => $eat) { echo "<p>"; echo $eat; echo "</p>"; } } 動作確認してないので間違いがあったらごめんなさい。 SQLでのORDER BYもしくは配列のソートが適時必要になると思います。
お礼
duron様 ご回答ありがとうございます!duron様は以前にもお助けいただいて本当に感謝しております。(前回は、フォームの件でベストアンサーを送らせていただいた者です。ちなみに、この質問は前回のフォームに付け加えたいことの続きです(笑)) さっそく試させていただきました! 初めやった時は画面が白くなってしまいましたが、自分なりに echo "■".$grouplist[$key1]."関連<br>"); の ) を外したりしてみたらなんとかできました。ありがとうございました! 実は、、上記にご説明していないことがありまして。。 echo "<p>"; echo $eat; echo "</p>"; のことなのですが、テーブルで組んでいまして、 echo "<table>"; echo "<tr><td>"; echo $eat; echo "</tr></td>"; echo "</table>"; みたいな感じで組んであります。 これは何とかなりませんでしょうか・・・? (すいません! tableで組んでるということを失念してご質問でしてしまいました。。)
お礼
何度も何度も本当にすいません!無事できました! 本当にありがとうございました!! これを応用してビシバシ作っていきたいと思います! 本当にありがとうございました!!