15.MyQSLのレコードを後ろから表示してみる。  
      チャットなどでメッセージを表示する場合、表示順が新しいメッセージは上のほうに、古いメッセージは
下のほうに表示される。 いわゆるLILO(末尾に追加書き込み、末尾から前方読み込み)になっている。 ここでは、データベースに末尾に追加で書き込まれたレコードを逆転して表示する方法について学びます。 1)レコードポインタを知る。 ここでは、指定したレコードポイントのレコードに移動する方法を学びます。 SELECT文で取り出されたレコードに対して、指定したレコードポインタのレコードに移動する関数が
mysqli_data_seek(読み込んだレコード,レコードポインタ)である。 <書式>mysqli_data_seek(読み込んだレコード,レコードポインタ); レコードポインタの先頭は0から始まります。
<ファイル名:recordPointer.php> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>レコードポインタを知る。</title> </head> <body> <?php $conn=mysqli_connect('localhost','root','*****') or print("データベースに接続できませんでした。<br>"); mysqli_select_db($conn,'userid_db') or print("データベースが存在しません。<br>"); $sql="select * from userid_tbl;"; $result=mysqli_query($conn,$sql) or print("SQLが実行できませんでした。<br>"); //数値添字配列 $row=mysqli_fetch_array($result,MYSQL_NUM); printf("%s %s %s %s<br><hr>",$row[0],$row[1],$row[2]," 初めてmysqli_fetch_array()を実行したので最初のレコード(レコードポインタ:0)が取り出されている。"); //連想配列(フィールド名で呼び出し) $row=mysqli_fetch_array($result,MYSQL_ASSOC); printf("%s %s %s %s<br><hr>",$row["id"],$row["userName"],$row["passWd"]," 2回目のmysqli_fetch_array()の実行なので2番目のレコードレ(コードポインタ:1)が取り出されている。"); //全てのレーコードの取り出し、前の行で取り出したレコードの続きになっていますか? while($row=mysqli_fetch_array($result,MYSQL_ASSOC)){
printf("%s %s %s %s<br>",$row["id"],$row["userName"],$row["passWd"]," 3回目以降、最後のレコードまでmysqli_fetch_array()を実行しているので、残りのすべてのレコードが取り出されている。"); } //mysqli_fetch_array()を実行するたびにレコードポインタがインクリメントされていますか? print("<hr>"); //指定したレコードの取り出し mysqli_data_seek($result,2); //レコードポインタを2にしているので、3番目のレコードが取り出される。 $row=mysqli_fetch_array($result,MYSQL_ASSOC); printf("%s %s %s %s<br><hr>",$row["id"],$row["userName"],$row["passWd"]," レコードポインタを2にしているので、3番目のレコードが取り出されている。"); mysqli_close($conn); ?> </body> </html> 2)mysqli_data_seek()を使ってレコードの順を逆に表示する。(ファイル名:recordReverseDisp1.php) <考え方> ①SELECT文で取り出されたレコードがいくあるかを調べる。 mysqli_num_rows(読み込んだレコード)    ②取り出されたレコードの数が仮に5レコードの場合。 mysqli_data_seek(読み込んだレコード,レコードポインタ)の、レコードポインタは、0から4になる。 ③レコードポインタの最後の番号から前方に向かってレコードポインタを移動しながら表示させる。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>mysqli_data_seek()を使ってレコードの順を逆に表示する。</title> </head> <body> <?php $conn=mysqli_connect('localhost','root','*****') or print("データベースに接続できませんでした。<br>"); mysqli_select_db($conn,'userid_db') or print("データベースが存在しません。<br>"); $sql="select * from userid_tbl;"; $result=mysqli_query($conn,$sql) or print("SQLが実行できませんでした。<br>"); //$resultのデータを後ろから読む。 //SELECT文で読み込まれたレコード数を調べている。 $rowNum=mysqli_num_rows($result); while($rowNum>0){ //レコードポインタを設定している。(最後のレコードポインタに移動している。) //($rowNum-1にしているのは、レコードポインタが0から始まるからです。) mysqli_data_seek($result,$rowNum-1); //指定したレコードを読み込んでいる。 $row=mysqli_fetch_array($result,MYSQL_ASSOC); printf("%s %s %s<br>",$row["id"],$row["userName"],$row["passWd"]); //レコードを前方に移動するためにデクリメントしている。 $rowNum--; } mysqli_close($conn); ?> </body> </html> 3)select * from userid_tbl order by フィールド名 descを使ってレコードの後ろから前方に向って取り出す。 SELECT文のORDER BY フィールド名 DESCを使って、データベースのレコードを降順で読み込む方法で処理する。 ORDER BY フィールド名 ASCを使えば、データベースのレコードを昇順に読み込むが、   デフォルトでこの処理になるので、特に書く必要はありません。
   <ファイル名:recordReverseDisp2.php> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>select * from userid_tbl order by フィールド名 descを使ってレコードの後ろから前方にとりだす。</title> </head> <body> <?php $conn=mysqli_connect('localhost','root','*****') or print("データベースに接続できませんでした。<br>"); mysqli_select_db($conn,'userid_db') or print("データベースが存在しません。<br>"); $sql="select * from userid_tbl order by id desc;"; $result=mysqli_query($conn,$sql) or print("SQLが実行できませんでした。<br>"); while($row=mysqli_fetch_array($result,MYSQL_ASSOC)){ printf("%s %s %s<br>",$row["id"],$row["userName"],$row["passWd"]); } mysqli_close($conn); ?> </body> </html> <課題1>3)のプログラムをテーブルを使って表示できるようにしなさい。(ファイル名:recordReverseDispExp.php) <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>select * from userid_tbl order by フィールド名 descを使ってレコードの後ろから前方にとりだす。(テーブル版)</title> </head> <body> <?php $conn=mysqli_connect('localhost','root','*****') or print("データベースに接続できませんでした。<br>"); mysqli_select_db($conn,'userid_db') or print("データベースが存在しません。<br>"); $sql="select * from userid_tbl order by id desc;";
$result=mysqli_query($conn,$sql) or print("SQLが実行できませんでした。<br>"); print("<table border='1'>\n"); print("<tr>\n"); print("<th>id</th><th>userName</th><th>passWd</th>\n"); print("</tr>\n"); while($row=mysqli_fetch_array($result,MYSQL_ASSOC)){ print("<tr><td>".$row["id"]."</td>"); print("<td>".$row["userName"]."</td>"); print("<td>".$row["passWd"]."</td></tr>\n"); } print("</table>\n"); mysqli_close($conn); ?> </body> </html>