• 締切済み

検索結果の表示件数の制御

CSVデータから検索キーワードを取得し、マッチしたものを全て表示することはできますが、例えば、検索結果の表示件数を5件ごとに制御(次の5件、前の5件)し、かつテーブルタグで表示する場合に、端数が出た場合(検索結果が38件だった場合に端数の3件は余計なテーブルタグが表示されない)の処理方法にかなり躓いています。 また、次の5件、前の5件のリンク文字も自動で表示したいのですが、参考になるようなサンプルコードやヒントをアドバイス下さい (1)検索キーワード $find にマッチしたものを $line 配列に代入する処理(一部省略) if($find)$result[] = $line; (2)検索結果に対する処理 echo "<div>検索結果</div>".count($result)."件<br />"; for($c = 0; $c < count($result); $c++){ list($data01,$data02,$data03,) = explode(",", $result[$c]); echo $data01; echo $data02; echo $data03; }

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

回答No.1

ちょっと長くなりますが、 <?php define('SCRIPT_PATH', './index.php'); $result = array(); for($i=0; $i<38; $i++){ $result[] = "test$i,hoge$i,moge$i"; } define('COUNT_LIMIT', 5); $count = count($result); $page = 1; if(isset($_GET['page'])){ $page = $_GET['page']; } $max = $page * COUNT_LIMIT; $first = $max - COUNT_LIMIT; if($page == 1){ $prev_link = '前の5件'; }else{ $prev_link = '<a href="'.SCRIPT_PATH.'?page='.($page-1).'">前の5件</a>'; } $last_page = false; for($i=$first; $i<$max; $i++){ if(isset($result[$i])){ list($data01, $data02, $data03) = explode(',', $result[$i]); echo $data01.'<br />'; echo $data02.'<br />'; echo $data03.'<br />'; echo '<hr />'; }else{ $last_page = true; break; } } if($last_page){ $next_link = '次の5件'; }else{ $next_link = '<a href="'.SCRIPT_PATH.'?page='.($page + 1).'">次の5件</a>'; } echo "$prev_link | $next_link"; ?> こんな感じでしょうか。 結局のところfor文を途中で切る動作をすればいいのではないかと思います。

関連するQ&A

  • 検索結果表示について

    こんにちは。お世話になっております。 あるテーブルからの検索結果をPHPにてブラウザ上に表示させる際のコードに関しての質問なのですが、これまで、検索したいレコードが1つである事を条件にした場合、以下のコードのどちらが適切なのでしょうか? if($rows==1){ while($row = mysql_fetch_array($result))   ・   ・ echo $row["id"]; または、 if($rows ==1){ $id = mysql_result($result, 0, "id"); echo $id; どちらもブラウザでは同じ結果が返ってくるかと思われますが、諸先輩方々からのアドバイスを頂ければと、投函させて頂きました。 お忙しい中恐縮ですが宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • DB検索の結果について

    PerlでDB検索をし、結果を画面に表示させるというプログラムを作成しているのですが、なぜか検索結果が1件の時は結果の表示がされないという現象が起こっています。複数件の時は、表示されるのですが。 プログラムは下記のようなものです。 ●入力画面から検索する文字列($name)を取得します。 #my $sql = "SELECT AAA FROM PRODUCT WHERE XXX '%$name%'"; my $sth = $dbh->prepare($sql) || die $dbh->errstr; $sth->execute || die $dbh->errstr; ●一致したデータを書き出します。 print "検索製品は、$name<P>"; while(@results = $sth->fetchrow) { @results = $sth->fetchrow; print @results, "\n<P>"; print $count, " 件完了<P>"; $count++; } print "合計 $count 件、見つかりました!"; <一件の結果> 検索製品は、12345で 1 件見つかりました! <複数件の結果> 検索製品は、12345で 12345製品A 件完了 12345製品B 2件完了 12345製品C 3件完了 12345製品D 4 件見つかりました! 上記のような結果です。検索結果1件の時はデータが表示されず、2件以上の時も表示件数、合計件数は合っていますが、$countの動作がおかしいです。("件完了"になってしまう) コードの記述の仕方に問題があるのでしょうか?おわかりの方がいらっしゃいましたら、ご教授頂けると幸いです。宜しくお願い致します。

  • 検索結果件数

    いつもお世話になっています。 今回は検索結果について質問があります。 ウェブサイト内でキーワードを調べる時に、検索結果件数が表示されますよね。 例えば「りんご」と検索すれば、 200件中 1〜10件目を表示と出ますよね。 しかし、「コロナ」と検索したら、検索結果件数が増えたり減ったりします。 「コロナ」だけで検索すれば、1ページ目が11725件 とカウントされますが、 2ページ目からは件数が減りました。 ※画像の赤文字で 11725件 と表示されている場所です。 また、「コロナ○」と空白を入れて検索すれば、同じキーワードなのにもかかわらず、 検索結果件数が増えていました。 ※○は空白(スペース) これは何かのバグなのでしょうか。 新型コロナのニュースが多くなってきているからなのか、更新が遅れているのでしょうか。 利用したサイト https://www.news24.jp/sp/index.html

  • 検索結果の件数表示

    商品情報が入ったテーブルから、一致した件数を求めて、商品名を一覧表示するSQLなのですが、件数を求めるのに時間がかかります。もっと早くする方法はないでしょうか? 登録されているのは700万件ぐらいで、件数を表示させるのに2.5秒、商品名を出すのは0.3秒くらいです。 select `商品名` FROM `商品情報` WHERE `商品名` LIKE '%検索ワード%' LIMIT 0 , 30 これで検索結果を求めて、 select count(`商品名`) FROM `商品情報` WHERE `商品名` LIKE '%検索ワード%' で一致した件数を求めています。 サーバのスペック メモリ1GB CPU2.66GHz

    • ベストアンサー
    • MySQL
  • mysqlの検索結果からある範囲の行数を取り出すには

    mysqlの検索結果からある範囲の行数を取り出すにはどうすればいいのでしょうか?たとえば検索結果から100~200行の間の行数を取り出すには、   ・   ・ $count=1; $result=mysql_query($sql); $rows=mysql_num_rows($result); while ($row=mysql_fetch_array($result)) { ・・・・ if( $count <= 99 ){ $count++; continue;} として99行目まで読み飛ばす処理をする以外に方法がありますか。 もっと効率よく取り出す方法があったら教えてください。

    • ベストアンサー
    • PHP
  • データベース表示結果のデザイン

    データベースの全件検索結果の表示のデザインをしたいと考えているのですがうまくいきません。 PHPのソースは以下の通りです。 <?php mysql_connect('localhost','root','******'); mysql_select_db('AAAAAAAA'); $sql= "select * from ??????"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["renban"]; echo " "; echo $row["tourokubi"]; echo " <br />"; echo $row["title"]; echo " "; echo $row["A"]; echo "-"; echo $row["B"]; echo " "; echo $row["C"]; echo " "; echo $row["D"]; echo " "; echo $row["E"]; echo " "; echo $row["F"]; echo " "; echo $row["G"]; echo "</p><hr />"; } } ?> この検索結果の1つ1つのデータをテーブルで囲んでechoで呼び出したA~Gまでの項目を<tr>や<td>で区切って表のような形にしたいのですがどのようにすればいいでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • access2000で検索、結果の表示件数制限

    access2000で受注管理をおこなっております。 フォームから条件を指定し,クエリでテーブルを検索し結果を表示している のですが、データが多すぎて困っています。 そこでフォーム上から検索前に表示させる件数を指定する機能をつけたいと 考えています。 100件と指定したとすると、まず100件表示して次の100件を表示する、などの操作が できればいいのですがやり方がわかりません。 せめて、表示件数に達すればあとの検索はしないといった表示件数を制限する 方法だけでも教えてください。よろしくお願いします。

  • 検索結果件数を取りたいです。

    環境は、php + mysqlで作ってます。 DBのテーブルに格納されている文字列をセレクト文で取り出して 対象件数が何個あるか知りたいです。 DBのテーブルに格納されている文字列はURLの文字列が入ってます。 例えば http://www.yahoo.com/ 確認のため、予め $obj = "http://www.yahoo.com/"; として、DBに入っているデータを書いておいて以下を実行しました。 $sql="select * from geturl where url=".$obj; $datas = mysql_query($sql , $db ); $num = mysql_num_rows($datas); echo $num; 結果: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/~~ といったエラーが出てしまいました。。。 今度は、予め数字を入れておいて実行してみました。 入れた文字は「123」です。 $obj = "123"; $sql="select * from geturl where url=".$obj; $datas = mysql_query($sql , $db ); $num = mysql_num_rows($datas); echo $num; 結果:正しく対象件数がブラウザに表示されてました。 数字だと正しく処理されて、英文字だとエラーになる原因がわかりません。。 アドバイスいただければ幸いです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • グーグル検索の検索結果(件数)について

    グーグル検索をすると、「約 11,800,000 件 」という風に、 その検索ワードが含まれるサイト数が出ます。 ですが、下にあるページを飛んでいっても、 多くて200件程しか、サイトを見ることができません。 一番最後のページに、 最も的確な検索結果を表示するために、上の 170 件と似たページは除外されています。 検索結果をすべて表示するには、ここから再検索してください。 と出て、「ここから再検索してください。」をクリックしても、 200件程しか、確認できないです。 この200件より後を確認する方法などはあるでしょうか? それは、どのような方法でしょうか? よろしくお願いいたします。

  • 【検索結果の表示件数】変更できる?できない?

    キーワードを入力すると、検索結果が表示されますよね。 その時に、1ページに表示される表示件数が1~10件なので 大量に回覧したい場合は少々不便に感じます。 goo、Googleなどの検索エンジンでは「検索オプション」という機能があり 表示の件数を10、20件などと指定でるのですが、こちらではそういったことは可能ですか? 一通り探してみましたが発見できなかったので、教えて下さい。 よろしくお願い致します。

専門家に質問してみよう