2016-09-15 8 views
-2

私は私のウェブサイトのための検索エンジンを作成していますし、私が見つけた結果の数を追加したい、私はそれを行う機能を探しましたが、私は見つけたものはすべて、PDOではありませんでした。だから私は2回クエリを実行することにしましたが、可能かどうかはわかりません。 PDOの結果を数える良い方法はありますか?それ以外の場合、同じクエリを2回実行するのは安全ですか?ありがとうございました!はどのように検索クエリーで見つかったレコード数を取得しますか?

あなたはすべてのレコードがクエリを形成し、あなたが返されたレコードの数を持っている count($result)を行うことができます取得するには、この $result = $sth->fetchAll();ようなものを使用すると仮定すると、
<?php 
     if(isset($_GET['tab'])) 
     { 
      if($_GET['tab'] == 'all') 
      { 
       $query = $db->query('SELECT * FROM search WHERE title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\' LIMIT 20'); 
      } 
      else if($_GET['tab'] == 'products') 
      { 
       $query = $db->query('SELECT * FROM search WHERE (type = \'products\') AND (title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\') LIMIT 20'); 
      } 
      else if($_GET['tab'] == 'blogpost') 
      { 
       $query = $db->query('SELECT * FROM search WHERE (type = \'blogpost\') AND (title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\') LIMIT 20'); 
      } 
      else if($_GET['tab'] == 'forumthread') 
      { 
       $query = $db->query('SELECT * FROM search WHERE (type = \'forumthread\') AND (title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\') LIMIT 20'); 
      } 
    ?> 

     <div id="resultsconainter"> 
      <div id="tabsconatiner"> 

      </div> 
     <?php 
      else 
      { 
       echo '<p>Sorry, this section is not available!</p>'; 
      } 
       if(isset($query)) 
       { 
        for($i=0; $i<100; $i++) 
        { 
         if($result = $query->fetch()) 
         { 
          $_GET['searchquery'] = rawurlencode($_GET['searchquery']); 
          $result = preg_replace("#\\b(" . $_GET['searchquery'] . ")\\b#i", "<b>$1</b>", $result); 
          echo '<div class="result"> 
          <a class="title" href="/qsoft/'.$result['link'].'">'.$result['title'].'</a> 
          <span class="link"> 
           <span class="beforelink" style="font-size:1.1em;font-size:1.3vw;position:relative;top:1px;padding-right:1px;">&#8227;</span> 
           localhost/QSoft/'.$result['link'].' 
          </span> 
          <span class="details">'.$result['details'].'</span> 
          </div>'; 
         } 
         else 
         { 
          if($i==0) 
          { 
           echo '<p>Sorry, no resluts found here for : &nbsp;<b>'.$_GET['searchquery'].'</b></p>'; 
          } 
         } 
        } 
       } 
      } 
      else 
      { 
       echo'<p>Missing tab informations, please retry</p>'; 
      } 
     } 
    ?> 

答えて

-2

。したがって、1つのクエリは必要ありません。より正確な答えを

、それは私達にあなたのコードの一部を提供すると良いでしょう、私たちはあなたを支援することができます。

+0

私はコードを追加するのを忘れて申し訳ありませんああ、ここでは – QApps

2

はい、検索エンジンのためにあなたは、2つのクエリを実行する必要があります。

  • 1は、実際の検索結果を取得します。あなたは常に検索条件に一致する行の数を取得するためにLIMIT演算子
  • 1を使用して、右のSQLクエリに選択された行の数を制限する必要がありことに注意してください。 このクエリは、実際の行が、1つだけの数を返すべきではありません。 MySQLの

、しかし、あなたは、最初のクエリのためのトリック

を使用する権利SELECTSQL_CALC_FOUND_ROWSキーワードを追加することができます。

$query = $db->query('SELECT SQL_CALC_FOUND_ROWS * FROM search ... LIMIT 20'); 

秒のためだけに、この単純なコード

を実行しながら、
$count = $db->query("SELECT FOUND_ROWS()")->fetchColumn(); 
+0

ですありがとうございます!私はそれを試みます。 – QApps

+0

私は右だ、私はこれを行う場合は、結果の数は結果を表示した後だろう、待って? – QApps

+0

いつでもどこのデータでも表示できます。前または後で結果が –

-2

これは私がやったことです、私はそれほど清潔ではありませんが、それは動作します:

if(isset($query)) 
       { 
        $didgetcount = false; 
        for($i=0; $i<100; $i++) 
        { 
         if($result = $query->fetch()) 
         { 
          $_GET['searchquery'] = rawurlencode($_GET['searchquery']); 
          $result = preg_replace("#\\b(" . $_GET['searchquery'] . ")\\b#i", "<b>$1</b>", $result); 
          echo '<div class="result"> 
          <a class="title" href="/qsoft/'.$result['link'].'">'.$result['title'].'</a> 
          <span class="link"> 
           <span class="beforelink" style="font-size:1.1em;font-size:1.3vw;position:relative;top:1px;padding-right:1px;">&#8227;</span> 
           localhost/QSoft/'.$result['link'].' 
          </span> 
          <span class="details">'.$result['details'].'</span> 
          </div>'; 
         } 
         else 
         { 
          if($i==0) 
          { 
           echo '<p>Sorry, no resluts found here for : &nbsp;<b>'.$_GET['searchquery'].'</b></p>'; 
           echo '<script> document.getElementById("resultsnumber").innerText = 0;</script>'; 
           $didgetcount = true; 
          } 
          else 
          { 
           if($didgetcount == false) 
           { 
            echo '<script> 
               function writeresults(n) 
               { 
                document.getElementById("resultsnumber").innerText = n; 
               } 
               writeresults('.$i.'); 
              </script>'; 
            $didgetcount = true; 
           } 
          } 
         } 
        } 
       } 
      } 
      else 
      { 
       echo'<p>Missing tab informations, please retry</p>'; 
      } 
+0

あなたはどう思いますか?修正するべきことはありますか?それは私のために適切に働いた。 – QApps

関連する問題