2017-08-15 7 views
0

現在、検索エンジンに「M」と入力すると、「Math」の値を持つインスピデータベース。 (私は自分のウェブサイト上でmysqlの機能に対してMatchを使用しています)。だから私は最初にMatch Against関数を実行し、出力が得られない場合は、再度検索を実行しますが、今度は自分のSQLの 'LIKE'関数を使用して、結果が得られない場合は、見つかりました。コードの 要旨は多少このようなものです..私は検索エンジンに「M」を入力したときにMatch Against関数がMysqlで結果を返さない場合、LIKE関数を使用するとより良い結果が得られます

mysql(Match against function) 
If (mysqli_num_rows > 0) 
{output} 
elseif (mysqli_num_rows < 1) 
{ mysqli (LIKE function) 
    then show output} 
else {show alert'no results'} 

は、このコードは、結果「数学」を提供します。

実際のコードです。

<?php 
      if (isset($_POST['go'])) 
        { $search = $_POST['search']; 
         $college = $_POST['colleges']; 
         if (!empty($search)) 
         { 
          if(isset($_POST['colleges'])) 
          { 

          $query1 = "Select filename, description, groupid, emailid, college, upload_date FROM images WHERE MATCH(description) AGAINST('$search') AND college = '$college' group by groupid order by MATCH(description) AGAINST('$search') DESC"; 
          $query_run1 = mysqli_query($con, $query1) ; 


          } 
          else 
          { 

         $query1 = "Select filename, description, groupid, emailid, college,upload_date FROM images WHERE MATCH(description) AGAINST('$search') group by groupid order by MATCH(description) AGAINST('$search') DESC"; 
          $query_run1 = mysqli_query($con, $query1) ; 



          $searchresults = mysqli_num_rows($query_run1); 
          ?><p class = "totalresults"> <br /> 
           <br /> &nbsp &nbsp <font size= "4" >Total Results : 
          <?php 
          echo $searchresults ; 
          ?> 
          </font> </p> 
          <?php 
          if(mysqli_num_rows($query_run1)>0) 
          { 

           ?> 
           <table class="searchenginelist" style="color: black;"> 
             <tr> 
             <th> Uploader </th> 
             <th> Title </th> 
             <th> Date </th> 
             <th> Upvotes </th> 
             <th> Downvotes </th> 
             <th> College </th> 
             </tr> 
           <?php 
            while($rows = mysqli_fetch_assoc($query_run1)) 
            { 
             //$imagedisplay = $rows['file']; 
             $imagename = $rows['filename']; 
             // mysqli_real_escape_string($con,$imagedisplay); 
             $descrip = $rows['description']; 
             $groupid = $rows['groupid']; 
             //$groupid = $_SESSION['groupid'] ; 
             $uploader_emailid = $rows['emailid']; 
             $college = $rows['college']; 


     ?> 


        <tr> 
        <td width="70px"> <?php 
         $query = " SELECT username from userinfo WHERE emailid = '$uploader_emailid' " ; 
          $query_run = mysqli_query($con,$query); 
         $raw = mysqli_fetch_assoc($query_run); 
         echo $raw['username']; ?> 
        </td> 
        <td width="450px"> <a href="imagespace.php?groupid=<?php echo $groupid ;?>"> 
         <?php echo $descrip ; ?> 
        </a> 
        </td> 
        <td style="font-size:15px;" width="85px">  
        <?php echo $rows['upload_date'] ; ?> 
        </td> 
        <td align="center" style="color:green;" width="50px"> 
        <?php 
         $query = "SELECT vote from votes where groupid = '$groupid' and vote = '1' "; 
            $query_run= mysqli_query($con, $query); 
             $upvote=mysqli_num_rows($query_run) ; 
             echo $upvote; 
            ?> 
       </td> 
       <td align="center" style="color:red;" width="50px"> 
        <?php 
         $query = "SELECT vote from votes where groupid = '$groupid' and vote = '0' "; 
            $query_run= mysqli_query($con, $query); 
             $downvote=mysqli_num_rows($query_run) ; 
             echo $downvote; 
             ?> 
        </td> 
        <td style="font-size:13px;" width="130px"> 
        <?php echo $college; ?> 
        </td> 
        </tr> 
            <?php 
            } 
            ?> 
            </table> 
            <?php 
          } 
          elseif(mysqli_num_rows($query_run1) < 1) 
          { 
          $query12 = "Select * FROM images WHERE description LIKE '%".mysqli_real_escape_string($con,$search)."%' group by groupid order by groupid DESC"; 
          $query_run12 = mysqli_query($con, $query12) ; 
          ?> <table class="searchenginelist" style="color: black;"> 
             <tr> 
             <th> Uploader </th> 
             <th> Title </th> 
             <th> Date </th> 
             <th> Upvotes </th> 
             <th> Downvotes </th> 
             <th> College </th> 
             </tr> 
          <?php  
          while($rows = mysqli_fetch_assoc($query_run12)) 
            { 
             //$imagedisplay = $rows['file']; 
             $imagename = $rows['filename']; 
             // mysqli_real_escape_string($con,$imagedisplay); 
             $descrip = $rows['description']; 
             $groupid = $rows['groupid']; 
             //$groupid = $_SESSION['groupid'] ; 
             $uploader_emailid = $rows['emailid']; 
             $college = $rows['college']; 

       ?> 
        <tr> 
        <td width="70px"> <?php 
         $query = " SELECT username from userinfo WHERE emailid = '$uploader_emailid' " ; 
          $query_run = mysqli_query($con,$query); 
         $raw = mysqli_fetch_assoc($query_run); 
         echo $raw['username']; ?> 
        </td> 
        <td width="450px"> <a href="imagespace.php?groupid=<?php echo $groupid ;?>"> 
         <?php echo $descrip ; ?> 
        </a> 
        </td> 
        <td style="font-size:15px;" width="85px">  
        <?php echo $rows['upload_date'] ; ?> 
        </td> 
        <td align="center" style="color:green;" width="50px"> 
        <?php 
         $query = "SELECT vote from votes where groupid = '$groupid' and vote = '1' "; 
            $query_run= mysqli_query($con, $query); 
             $upvote=mysqli_num_rows($query_run) ; 
             echo $upvote; 
            ?> 
       </td> 
       <td align="center" style="color:red;" width="50px"> 
        <?php 
         $query = "SELECT vote from votes where groupid = '$groupid' and vote = '0' "; 
            $query_run= mysqli_query($con, $query); 
             $downvote=mysqli_num_rows($query_run) ; 
             echo $downvote; 
             ?> 
        </td> 
        <td style="font-size:13px;" width="130px"> 
        <?php echo $college; ?> 
        </td> 
         </tr> 


          } 
          ?> 
          </table> 
          <?php 
          } 
          else 
          { 
           echo '<script type="text/javascript"> alert ("No results found") </script>' ; 
          } 
         } 
         else 
         { echo '<script type="text/javascript"> alert ("No data entered") </script>'; 
         } 
         } 
        } 
+1

擬似コードはここに掲載しないでください。あなたがここに書いたものと最終製品は全く異なる可能性があるので、どんな答えでも貴重なものになるでしょう。 – GrumpyCrouton

+0

'like'クエリでなぜ単に_start_しないのですか?それ以外の場合は、データベースに2つのクエリを実行しますが、理由はありません。 – GrumpyCrouton

+0

@ GrumpyCroutonこれに関連する実際のコードは200行です。また、私はそれを実行すると、私に内部エラーが発生します。投稿する必要がありますか? – Learner

答えて

1

コードに構文上の問題があり、else文が正しく並んでいないため、ページが機能しませんでした。 (たとえば、} else {は別の} else {と並んでいました)。

私は問題の内容を確認できるようにすべてのコードを調べてフォーマットしました。を覚えておいてください。賢明なコードインデントが良い考えです。 これはコードを読むのに役立ちます。さらに重要なことは、コードをデバッグするのに役立つことです。 Take a quick look at a coding standardご自身の利益のために。 このコードを数週間/数ヶ月で修正するように求められ、最終的に私に感謝します。

<?php 
if (isset($_POST['go'])) { 
    $search = $_POST['search']; 
    $college = $_POST['colleges']; 
    if (!empty($search)) { 
     if(isset($_POST['colleges'])) { 

      $query1 = "Select filename, description, groupid, emailid, college, upload_date FROM images WHERE MATCH(description) AGAINST('$search') AND college = '$college' group by groupid order by MATCH(description) AGAINST('$search') DESC"; 
      $query_run1 = mysqli_query($con, $query1); 

     } else { 

      $query1 = "Select filename, description, groupid, emailid, college,upload_date FROM images WHERE MATCH(description) AGAINST('$search') group by groupid order by MATCH(description) AGAINST('$search') DESC"; 
      $query_run1 = mysqli_query($con, $query1); 
      $searchresults = mysqli_num_rows($query_run1); 

      ?> 
       <p class = "totalresults"> 
        <br /> 
        <br /> 
        &nbsp &nbsp <font size= "4" >Total Results: <?php echo $searchresults; ?></font> 
       </p> 
      <?php 

       if(mysqli_num_rows($query_run1)>0) { 

       ?> 
        <table class="searchenginelist" style="color: black;"> 
        <tr> 
         <th> Uploader </th> 
         <th> Title </th> 
         <th> Date </th> 
         <th> Upvotes </th> 
         <th> Downvotes </th> 
         <th> College </th> 
        </tr> 
       <?php 
        while($rows = mysqli_fetch_assoc($query_run1)) { 
         //$imagedisplay = $rows['file']; 
         $imagename = $rows['filename']; 
         // mysqli_real_escape_string($con,$imagedisplay); 
         $descrip = $rows['description']; 
         $groupid = $rows['groupid']; 
         //$groupid = $_SESSION['groupid'] ; 
         $uploader_emailid = $rows['emailid']; 
         $college = $rows['college']; 

       ?> 


        <tr> 
         <td width="70px"> 
          <?php 
           $query = " SELECT username from userinfo WHERE emailid = '$uploader_emailid' " ; 
           $query_run = mysqli_query($con,$query); 
           $raw = mysqli_fetch_assoc($query_run); 
           echo $raw['username']; 
          ?> 
         </td> 
         <td width="450px"> 
          <a href="imagespace.php?groupid=<?php echo $groupid ;?>"> 
           <?php 
            echo $descrip; 
           ?> 
          </a> 
         </td> 
         <td style="font-size:15px;" width="85px">  
          <?php 
           echo $rows['upload_date'] ; 
          ?> 
         </td> 
         <td align="center" style="color:green;" width="50px"> 
          <?php 
           $query = "SELECT vote from votes where groupid = '$groupid' and vote = '1' "; 
           $query_run= mysqli_query($con, $query); 
           $upvote=mysqli_num_rows($query_run) ; 
           echo $upvote; 
          ?> 
         </td> 
         <td align="center" style="color:red;" width="50px"> 
          <?php 
           $query = "SELECT vote from votes where groupid = '$groupid' and vote = '0' "; 
           $query_run= mysqli_query($con, $query); 
           $downvote=mysqli_num_rows($query_run) ; 
           echo $downvote; 
          ?> 
         </td> 
         <td style="font-size:13px;" width="130px"> 
          <?php 
           echo $college; 
          ?> 
         </td> 
        </tr> 

       <?php 
        } //end while loop 
       ?> 
        </table> 
       <?php 
       } else if(mysqli_num_rows($query_run1) < 1) { 
        $query12 = "Select * FROM images WHERE description LIKE '%".mysqli_real_escape_string($con,$search)."%' group by groupid order by groupid DESC"; 
        $query_run12 = mysqli_query($con, $query12) ; 
        ?> 
         <table class="searchenginelist" style="color: black;"> 
          <tr> 
           <th> Uploader </th> 
           <th> Title </th> 
           <th> Date </th> 
           <th> Upvotes </th> 
           <th> Downvotes </th> 
           <th> College </th> 
          </tr> 
       <?php  
        while($rows = mysqli_fetch_assoc($query_run12)) { 
         //$imagedisplay = $rows['file']; 
         $imagename = $rows['filename']; 
         // mysqli_real_escape_string($con,$imagedisplay); 
         $descrip = $rows['description']; 
         $groupid = $rows['groupid']; 
         //$groupid = $_SESSION['groupid'] ; 
         $uploader_emailid = $rows['emailid']; 
         $college = $rows['college']; 

       ?> 
          <tr> 
           <td width="70px"> 
            <?php 
             $query = " SELECT username from userinfo WHERE emailid = '$uploader_emailid' " ; 
             $query_run = mysqli_query($con,$query); 
             $raw = mysqli_fetch_assoc($query_run); 
             echo $raw['username']; 
            ?> 
           </td> 
           <td width="450px"> 
            <a href="imagespace.php?groupid=<?php echo $groupid ;?>"> 
             <?php 
              echo $descrip ; 
             ?> 
            </a> 
           </td> 
           <td style="font-size:15px;" width="85px">  
            <?php 
             echo $rows['upload_date'] ; 
            ?> 
           </td> 
           <td align="center" style="color:green;" width="50px"> 
            <?php 
             $query = "SELECT vote from votes where groupid = '$groupid' and vote = '1' "; 
             $query_run= mysqli_query($con, $query); 
             $upvote=mysqli_num_rows($query_run) ; 
             echo $upvote; 
            ?> 
           </td> 
           <td align="center" style="color:red;" width="50px"> 
            <?php 
             $query = "SELECT vote from votes where groupid = '$groupid' and vote = '0' "; 
             $query_run= mysqli_query($con, $query); 
             $downvote=mysqli_num_rows($query_run) ; 
             echo $downvote; 
            ?> 
           </td> 
           <td style="font-size:13px;" width="130px"> 
            <?php 
             echo $college; 
            ?> 
           </td> 
          </tr> 


         </table> 
       <?php 
        } //end while loop 
      } else { //num rows < 1 
       echo '<script type="text/javascript"> alert ("No results found") </script>' ; 
      } 
     } 
    } else { //no searches returned 
     echo '<script type="text/javascript"> alert ("No data entered") </script>'; 
    } 
} 

実際に複雑なネストされた構造の場合、私はあなたのコードでそれぞれの終わり括弧がどのようになっているかをコメントすることもお勧めします。私は、}が何を終えているかを正確に見ることができるようにコメントを付けました。

WARNING:This code may be vulnerable to SQL Injection AttacksMySQLiまたはPDOについては、Prepared Statementsについて学習する必要があります。私は私wrote a function forはそれが非常に簡単、非常にきれい、および方法より安全な非パラメータ化クエリを使用するよりも作るPDOを、お勧めします。

0

ホストのmysql.iniにアクセスできる場合は、フルテキスト検索の最小語長を変更するだけです。

[mysqld] 
ft_min_word_len=N 

それ以外の場合は、使用する検索機能を決定する必要があります。 1つの検索がフルテキスト検索であり、もう1つが単純なLIKEである場合、ユーザにとっては直感的ではありません。

ユーザーが2文字を超える文字を入力すると、フルテキストのみを使用することもできます。

// ... 
if (strlen($query) < 4) { 
    $where = "MATCH (...) AGAINST ..."; 
} else { 
    $where = "...LIKE ... "; 
} 
$sql .= $where; 

Btw。 MATCH AGAINSTは通常よりも多くの結果を返すべきです。したがって、MATCH AGAINSTが0行を返した後にLIKE検索を実行すると、まったく役に立たなくなります。

+0

Godaddyでmysql.iniにアクセスする方法を教えてください。 – Learner

+0

あなたの方法は、基本的に検索を行うために必要な最小語長を変更することですか? – Learner

関連する問題