2重ループとextract($row)

PHP

1列ごとに、その列に紐付く子テーブルの内容をwhileループで表示したくいろいろ試した。

親名前   子情報
————————–
A       あか
        あお
————————–
B       あお
        き
        くろ
————————–


上記のイメージなのだけど、
そもそも2重のループも初めてで試行錯誤しながらなんとか達成。
(そもそも2重ループが最適なのかは謎)

~~~~~~~~~~~~~~~~~~
$sql = “SELECT 名前 FROM 親テーブル”;

echo”<table>”;

$res = mysql_query( $sql, $・・ )
WHILE( $row = mysql_fetch_assoc($res) )
{
extract($row);
echo”<tr>”;
echo”<td>” . $row[“親名前”] . “</td>”;
echo”<td><table>”;

     $sql2 = “SELECT 子情報 FROM 子テーブル WHERE 子テーブルの中の親名前=’$親名前‘”;
     $res2 = mysql_query( $sql2, $・・ );

     WHILE( $row = mysql_fetch_assoc($res2) )
     {
     echo”<tr>”;
     echo”<td>” . $row[“子情報”] . “</a></td>”;
     echo”</tr>”;
     }

echo”</table></td>”;
echo”</tr>”;
}
echo”</table>”;
~~~~~~~~~~~~~~~~~~

決め手はextract

mysql_fetch_assocの説明に、
// 注: ループ内で extract($row); を実行すれば、
// $カラム名 で変数として利用できる

ようなことが書いてあり、むむむとひっかかった。

親の列に紐つけたいんだけど
列の内容自体がwhileループされている内容だからどうしようと思ったのだけど、
extractがカラム名を自動で$カラム名と変数に入れてくれるんですね。

子テーブルのsqlクエリ自体も親テーブルのwhile分の中に書いちゃって
(この発想はなかった 汗)
検索条件を親テーブルの出力された名前と子テーブルのもつ名前がイコールのもの
WHERE 子テーブルの中の親名前カラム = ’$親名前’
で紐付ければちゃんとでてきたひらめき電球

—–

コメント

タイトルとURLをコピーしました