• ベストアンサー
  • 困ってます

phpとmysqlでデータの一覧表示をしたいと思っています。

phpとmysqlでデータの一覧表示をしたいと思っています。 ずらーっと並べるだけでなく、1ページに100件した場合には 10行毎に<hr>や<br>などのタグを挿入して間隔を空けたいのですが どのようにしたらいいのか悩んでいます。 現在は下記のようにLIMITで何度もqueryを発行しています。 できれば1回のqueryで処理したいのですが 他にどのような方法があるでしょうか。 $rs = mysql_query("select * from data order by id desc LIMIT 0,10 ;",$conn); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $site = $rec['site']; $url = $rec['url']; echo '<a href="'.$url.'">'.$site.'</a>'; } $rs = mysql_query("select * from data order by id desc LIMIT 10,10 ;",$conn); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $site = $rec['site']; $url = $rec['url']; echo '<a href="'.$url.'">'.$site.'</a>'; } $rs = mysql_query("select * from data order by id desc LIMIT 20,10 ;",$conn); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $site = $rec['site']; $url = $rec['url']; echo '<a href="'.$url.'">'.$site.'</a>'; } よろしくお願い致します。

共感・応援の気持ちを伝えよう!

  • MySQL
  • 回答数3
  • 閲覧数176
  • ありがとう数18

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2
  • JaneDue
  • ベストアンサー率75% (263/350)

>おかしなところなどありますでしょうか。 「 $i = --$i; 」は、動作はすると思いますが、とても不自然な書き方です。 --$i; は $i = $i-1; の省略型ですから、 省略型と普通の書き方がごちゃまぜになってしまっています。書くなら 「 $i = $i-1; 」 か「 --$i; 」だけのどちらかにしましょう。 >また、教えていただいたif(!--$i)の部分が分かりませんでした・・ >その点も教えて頂けると嬉しいです。 (すでにご理解されているように思えますが一応。) 感嘆符 ! は、否定ですので  if(!--$i)は、 「 まず$iを-1して、その結果が FALSE つまり 0 なら~」ということです。 $i=$i-1; if($i == 0){ ですね。 他のプログラム言語でも、演算子はほぼ同じですので、一度「演算子」に目を通しておかれるとよいかと思います。 http://www.php.net/manual/ja/language.operators.increment.php ※もちろん無理に省略する必要はありません。ご自分で分かりやすいのが一番です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

丁寧に教えて頂きましてありがとうございました。 とても分かりやすかったです。

その他の回答 (2)

  • 回答No.3
  • yambejp
  • ベストアンサー率51% (3827/7415)

$i = --$i; はありえない・・・。 --$iという書式はデクリメントといって $i=$i-1という意味ですから それを$iに代入しても仕方がありません。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

指摘して頂きありがとうございました。

  • 回答No.1
  • JaneDue
  • ベストアンサー率75% (263/350)

カウント用のflagをたてればOKです。一度に100件取得して $i=10; //区切りたい件数 while(~){  処理~    //最後に$iを-1する。0なら<hr>出力して、カウンタを10に戻す  if(!--$i){echo "<hr>"; $i=10;} }

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 アドバイスを参考にして下記のようにしてみました。 ぱっとみたところうまくいっているのですが おかしなところなどありますでしょうか。 $i=10; //区切りたい件数 while(~){  処理~   $i = --$i; if($i==0){ echo '<hr>'; $i = 10; } } また、教えていただいたif(!--$i)の部分が分かりませんでした・・・ その点も教えて頂けると嬉しいです。

関連するQ&A

  • mysqlのスマートな書き方

    MySQL5.1とPHP5を使っています。 phpからmysqlのtestテーブルにアクセスして点数順に生徒名一覧を作成したいと思っています。 イメージとしてはこのような感じです。○○○は名前になります。 90点以上 ○○○ ○○○ 80点以上 ○○○ ○○○ ○○○ 70点以上 ○○○ ○○○ ○○○ ○○○ このような一覧を表示するため、下記のように作成したところ上記のような表示をしてくれました。 しかしながら、同じmysql_queryを何度も使っていますし、DBに負担が掛かりそうな気がします(本当に負荷があるのかは分かりませんが・・・) もっとスマートな書き方はないものでしょうか。 よろしくお願い致します。 echo "90点以上"; $rs = mysql_query("select * from test where kamoku = '1' order by tensu desc LIMIT 0, 100;",$conn); while($res = mysql_fetch_array($rs, MYSQL_ASSOC)){ if ($res['tensu'] >= 90){ echo $res['name']; echo "<br>" ; } } echo "80点以上~90点未満"; $rs = mysql_query("select * from test where kamoku = '1' order by tensu desc LIMIT 0, 100;",$conn); while($res = mysql_fetch_array($rs, MYSQL_ASSOC)){ if($res['tensu'] >= 80 and $res['tensu'] < 90 ){ echo $res['name']; echo "<br>" ; } } echo "70点以上~80点未満"; $rs = mysql_query("select * from test where kamoku = '1' order by tensu desc LIMIT 0, 100;",$conn); while($res = mysql_fetch_array($rs, MYSQL_ASSOC)){ if($res['tensu'] >= 70 and $res['tensu'] < 80 ){ echo $res['name']; echo "<br>" ; } }

    • ベストアンサー
    • MySQL
  • 構文の省略について

    下記をもっと省略(短い構文で)して書きたいのですが、どのようなやり方があるでしょうか。 testというテーブルから指定したidのnameを取り出して並べたいだけなのですが、このような長々としたものしか思い浮かびませんでした。 <?php $n1 = 1; $n2 = 2; $n3 = 3; $rs1 = mysql_query("select * from test where id = '$n1';",$conn); $rec1 = mysql_fetch_array($rs1, MYSQL_ASSOC); echo $rec1['name']; echo <br>; $rs2 = mysql_query("select * from test where id = '$n2';"); $rec2 = mysql_fetch_array($rs2, MYSQL_ASSOC); echo $rec2['name']; echo <br>; $rs3 = mysql_query("select * from test where id = '$n3';"); $rec3 = mysql_fetch_array($rs3, MYSQL_ASSOC); echo $rec3['name']; mysql_free_result($rs1); mysql_free_result($rs2); mysql_free_result($rs3); mysql_close($conn); ?>

    • ベストアンサー
    • PHP
  • PHPでのMYSQL接続のデータ表示

    PHPのバージョンは4.2.3です。 index.php という一覧表示画面から 一意なKey文字列を受け取りそのデータに合致する データの詳細を表示する画面です。 実データ部分が表示されず困っています。 実行時のPHPのエラーも出力されないので いまいちどこが悪いのかわかりません アドバイスよろしくお願いします。 <?php require_once( "common.php" ); require_once( "const.php" ); if(! $conn = mysql_connect( 'ホスト名','ユーザー名','PASS')){ die( 'MYSQL接続失敗'); } $sql = ""; $sql .= "select * from LIVE "; $sql .= "ORDER BY Date DESC "; $sql .= "WHERE ID=".$_REQUEST[ "KEY" ]; echo $sql; mysql_select_db("DB名",$conn); $rs = mysql_query($sql, $conn); $DATE=$rs['DATE']; $TITLE=$rs['TITLE']; $PLACE=$rs['PLACE']; $ARTIST=$rs['ARTIST']; echo $DATE; echo $TITLE; echo $PLACE; echo $ARTIST; //$rec = mysql_fetch_array( $rs, MYSQL_ASSOC ); ?> <HTML> <HEAD><TITLE>ライブ予定</TITLE></HEAD> <BODY><H1 ALIGN="CENTER">ライブ予定詳細</H1> <A HREF="./">戻る</A> <TABLE BORDER="1" ALIGN="CENTER" WIDTH="100%"> <TR><TD BGCOLOR="#FFFFCC">日付</TD> <TD><?php HESC($rec['DATE']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">タイトル</TD> <TD><?php HESC($rec['TITLE']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">場所</TD> <TD><?php HESC($rec['PLACE']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">アーティスト</TD> <TD><?php HESC($rec['ARTIST']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">本文</TD> <TD></TD></TR> </TABLE> </BODY></HTML>

    • ベストアンサー
    • PHP
  • if構文の中で更に条件分岐をしたい

    ニュース記事を下記のようにカテゴリ別に表示しています。 while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ if($rec['category'] == 1){ echo '<a href="'.$rec['url'].'" target=_blank>'.$rec['title'].'</a><br>'; } elseif($rec['category'] == 2){ echo '<a href="'.$rec['url'].'" target=_blank>'.$rec['title'].'</a><br>'; } elseif($rec['category'] == 3){ echo '<a href="'.$rec['url'].'" target=_blank>'.$rec['title'].'</a><br>'; } } 24時間以内の記事にはNEWを表示したいのですが、どのように組み込んだらいいのか分かりません。 下記がNEWを表示するためのコードです。 while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $ts = strtotime($rec['date']); $tsi = (time()-$ts); if($tsi<86400){ echo new.'<br>'; } else{ echo '<br>'; } } このようにifの中で更に条件分岐したい場合、どのようなやり方があるのでしょうか?

    • ベストアンサー
    • PHP
  • PHPで空の値を表示させたくない場合

    PHPでデータベースから値を取り出し 出力させるというスプリクトを作成してるのですが どうしても、入力フォームに空を値を 入れても空の値まで出力されてしまいます こういう場合はどうやって空の値を 弾くコードを書けばいいのか教えて もらえないでしょうか? ちなみに自分が書いたコードはこれです <?php $conn=mysql_connect("localhost", "username", "pass"); if (!$conn) { die('接続失敗です。'.mysql_error()); } mysql_select_db("database", $conn); mysql_query("SET NAMES 'ja-utf8'", $conn); mysql_query("INSERT INTO tablename (caram) VALUES ('$title_a')", $conn); $sql='SELECT title FROM tablename'; $rs=mysql_query($sql, $conn); $res=mysql_fetch_assoc($rs); if (isset($res)) { while ($res=mysql_fetch_assoc($rs)) { echo "<br>"; echo htmlspecialchars($res["caram"], ENT_QUOTES); } } else { echo ""; } mysql_close($conn); ?> どなたかよろしくお願いします。

    • ベストアンサー
    • PHP
  • データベースからの抽出&表示方法

    php、mysqlともに初心者なんですが、どのような構文(?)にしたらいいのか解決できるのか分かりません。 ニュース記事のデータベースにnewsというテーブルがあります。 id category       url                  title  count  article 1   a   http://headlines.yahoo.co.jp/hl?***   ******  80   ******* 2   a   http://news.goo.ne.jp/article/***    ******  70   ******* 3   a   http://news.goo.ne.jp/article/***    ******  50   ******* 4   a   http://www.mainichi-msn.co.jp/***    ******  40   ******* 5   a   http://www.mainichi-msn.co.jp/***    ******  20   ******* 6   a   http://www.yomiuri.co.jp/**       ******  20   ******* 7   a   http://www.yomiuri.co.jp/**       ******  10   ******* 8   b   http://www.yomiuri.co.jp/**       ******  10   ******* このテーブルからcategoryがaに属するtitleをcount順に表示したいのですが、 表示する際に news.goo.ne.jp と mainichi-msn.co.jp と yomiuri.co.jp をurlに含む記事にはtitleの最後に「注目」という文字を追加し、 それ以外の記事はそのまま表示したいと思っています。 下記のようにやってみたのですが、これでは全てのtitleに「注目」という文字が表示されてしまいます。 <?php $rs = mysql_query("select * from news where category = 'a' order by count desc",$con); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ echo "<a href=" ; echo $rec['url'] ; echo ">" ; echo $rec['title'] ; echo "</a>" ; echo "注目" ; echo "<br>" ; } mysql_free_result($rs); mysql_close($con); ?> どのような構文にしたらgoo・msn・yomiuriの記事だけに注目という文字を付け加えることができるのでしょうか。 どなたかアドバイスして頂けませんでしょうか。よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 【mysql+php】荒らしにあっているので・・・

    【mysql+php】 レビューサイトの運営をしています。 ここ1週間ほど、機械的に投稿されるものにつかまってしまい、荒らしにあっています。 荒らしの投稿は、必ず <a href とaタグがつくので、それ以外を吐き出ししたいと思います。 いま組んでいるソースを載せますので、そのように組んだらよいのか教えていただけますと幸いです。 (本当なら、そういった投稿を阻止するプログラムを組めればいいのですが、今回は暫定的に、上記のプランで行きたいと思います) 宜しくお願いいたします。 テーブル review reviewid , titleid , review , review_date 1 , 1 , おもしろかった , 2011-02-12 2 , 15 , つまらなかった , 2011-03-10 3 , 55 , <a href="http://・・・ , 2011-03-12 4 , 55 , <a href="http://・・・ , 2011-03-12 5 , 55 , <a href="http://・・・ , 2011-03-12 6 , 55 , <a href="http://・・・ , 2011-03-12 --------------------------------------------- $sql99= "select * from review order by reviewid desc limit 0, 10"; $result99 = mysql_query($sql99); $rows99 = mysql_num_rows($result99); while($row99 = mysql_fetch_array($result99)){ echo $row99["review"]; } --------------------------------------------- 除外したい言葉(登録は来てもいいので、吐き出したくない言葉) href 細かい組んだソースは書いておりませんが、 これだけではわからない、などありましたらぜひお願いいたします。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP実行時の警告について

    こんばんわよろしくお願いします。 aaacafeのレンタルサーバーでPHPのバージョンは4.2.3です。 Mysqlに接続して結果を一行づつ表示したいのですが 実行時に下記の2行警告が出てヘッダ部分しか表示しません。 自分で調べてぼんやりとは原因はわかったのですが、 具体的にどう直してよいかわかりません。 ご教示お願いします。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource 以下ソースです。 <?PHP $sql = ""; $sql .= "select * from LIVE"; $sql .= " ORDER BY DATE DESC"; ?> <HTML> <HEAD> <TITLE>接続テスト</TITLE> </HEAD> <BODY> <?php //SQL発行 $rs = mysql_query($sql, $conn); echo "<table cellSpacing=0 cellPadding=0>\n"; echo "<tr bgcolor=yellow>"; echo "<th >日付</th>"; echo "<th>ツアータイトル</th>"; echo "<th>会場</th>"; echo "<th>アーティスト</th>"; echo "</tr>\n"; ■この行→ while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC ) ){ echo "<tr>\n"; echo "<td>" . _hs($rec['DATE']) . "</td>\n"; echo "<td>" . _hs($rec['TITLE']) . "</td>\n"; echo "<td>" . _hs($rec['PLACE']) . "</td>\n"; echo "<td>" . _hs($rec['ARTIST']) . "</td>\n"; echo "</tr>\n"; } //結果セットの解放 ■この行→ mysql_free_result( $rs ); //切断 mysql_close($conn); echo "</table>"; ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • mysql_fetch_arrayとテンプレートの使い方

    データベースからランダムに取り出した3つのデータがあります。 取り出したデータにはそれぞれid、name、ageのデータが入っています。 $rs = mysql_query("select * FROM table order by Rand() LIMIT 0,3;",$con); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $tpl->assign(array( id => $rec[id], name => $rec['name'], age => $rec[age] )); } これだと1種類のデータが3つ連続して表示されてしまいました。 3種類のデータを全部表示するにはどのようにしたらよいのでしょうか? テンプレート(?)の使い方がよく分かっていないので検討違いのことをしている気がしますがよろしくお願いします。

    • ベストアンサー
    • MySQL
  • selectであるデータを検索した結果のリターンコードを取得するには?

    以下のようなコードをPHP内で実行しています。 以下の例は、MySQLテーブル'test_tbl'の'id'というフィールド内に'500'というデータが存在した場合、そのデータを取り出してecho文で表示させるようにしたものです。 検索した結果データが存在しなかった場合、データが存在していないということを、リターンコードで判断したいと思っています。 リターンコードはどうやって見ることができますか? '$rs'にリターンコードが入ってくるのでしょうか? ('Resource id #3'のような値が返ってくるようですが) リターンコードとその意味の一覧とかが、どこかのサイトにあればURLを教えていただければ助かります。 よろしくお願い致します。 ------------------------------------------------ <?php  if( ! $conn = mysql_connect( 'localhost', 'user_id', 'password') ){   die( 'MySQL接続失敗' );  }  mysql_select_db( 'test_db', $conn );  $rs = mysql_query("SELECT id FROM test_tbl WHERE id = 500", $conn);  $rec = mysql_fetch_array( $rs, MYSQL_ASSOC );  echo $rec['id'];  mysql_free_result( $rs );  mysql_close($conn); ?>