教えて! goo のコンテンツに対する取り組みについて

次の様な処理を行いたいのですが方法をご教授下さい。


DBのテーブルに10個のレコードがあります。
すべてのレコードの情報を表示させます。
HTMLのテーブルは2列5行で表示させたい。

つまりHTMLで下記のように表示したい。
<TABLE>
<TR>
<TD>データ1</TD>
<TD>データ2</TD>
<TD>データ3</TD>
<TD>データ4</TD>
<TD>データ5</TD>
</TR>
<TR>
<TD>データ6</TD>
<TD>データ7</TD>
<TD>データ8</TD>
<TD>データ9</TD>
<TD>データ10</TD>
</TR>
</TABLE>

これをPHPで
<?
$con = mysql_connect("$dbhost", "$dbuser", "$dbpass");
mysql_select_db("$dbname");
$sql= "select * from DB_name";
$rs=mysql_query($sql);
?>
<TABLE>
<TR>
<? while($row=mysql_fetch_array($rs)){ ?>
<td><? echo $row['data'] ?></td>
<?}?>
</tr>
</table>

のように単純にデータを取り出すことは出来るのですが、
データを5つ毎に</TR><TR>を出す方法が分かりません。

このような処理は皆様はどのように行っていますか。
基本的な質問で申し訳ありませんが、ご教授下さい。
よろしくお願い致します。

教えて!goo グレード

A 回答 (4件)

<? $i = 0; ?>


<? while($row=mysql_fetch_array($rs)){ ?>
<? $i++; ?>
<td><? echo $row['data'] ?></td>
<? if(($i % 5) == 0){ ?>
</tr>
<tr>
<? } ?>
<? } ?>
で、5個ずつ<tr>を挟むのはどうですか?
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。
この方法で実行したら希望通りの結果が出ました。
ただし、データが5の倍数個では無い時の処理が必要だと思うので自分なりに考えてみたいと思います。
大変参考になりました!

お礼日時:2005/11/17 15:48

とりあえず下のスクリプトをtest.php等の名前をつけて保存して


実行してみてください。


---------------------
<html>
<head>
<title>test</title>
</head>
<body >
<?php
print "<TABLE>";

for($i = 0;$i < 100;$i++){
if ( $i %5 ==0){
print "<TR>";
}

print "<TD>データ" . $i . "</TD>";

if ( $i %5 ==4){
print "</TR>";
}
}

print "</TABLE>";
?>
</body>
</html>

---------------------


実現したいことはこれをほんの少し応用すれば出来るかと思います。
頑張ってください。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございました。
今回の件で
for()構文の良い勉強になりました。

お礼日時:2005/11/17 15:57

1.要素数10個の配列を定義する


2.配列の10個の要素をすべて空文字列で初期化する
3.配列の1番目の要素から順に、クエリから取り出したデータを配列に格納する。データが10個未満で尽きた場合は格納を中止する。また、データが11個以上ある場合に配列の要素数を超えないように10個格納したら格納を終了する。
4.「<TABLE>」から「</TABLE>」までを、以下のように固定パターンで一気に出力する
<TABLE>
<TR>
<TD><? echo $array[1] ?></TD>
<TD><? echo $array[2] ?></TD>
<TD><? echo $array[3] ?></TD>
<TD><? echo $array[4] ?></TD>
<TD><? echo $array[5] ?></TD>
</TR>
<TR>
<TD><? echo $array[6] ?></TD>
<TD><? echo $array[7] ?></TD>
<TD><? echo $array[8] ?></TD>
<TD><? echo $array[9] ?></TD>
<TD><? echo $array[10] ?></TD>
</TR>
</TABLE>

他にも、何個のデータを出力したかのカウンターを設けて、5個づつで「</TR><TR>」を出力するって手もありますが、データ総数が5の倍数個の時と、5の倍数個でない時に最後の処理が煩雑になり、処理が難しくなってしまいます。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。
この様な方法もあるんですね。
大変勉強になりました。

お礼日時:2005/11/17 15:59

適当な変数を用意してデータのrowを数えさせ、5回ごとに<tr>を出力させます。


もちろん、フェッチできたデータの数が5の公倍数でなかった場合、あまった<td>に適切なcolspanをかませる必要があるので注意が必要です。
フェッチしたデータの数を5で割った余りを取得して、switchで振り分けるのが無難かと思います。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。
大変参考になりました^^

お礼日時:2005/11/17 15:45

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

教えて!goo グレード

人気Q&Aランキング