php-mysql-需要匹配两个相互补充而不是独立的关键词

时间:2019-03-23 03:24:53

标签: php mysql

我在mysql中有一个数据库表cav。

我需要根据两个要在两列中搜索的关键字使用php来获取结果。 “ caseno”和“ year”。

在用户表单中,我提供了两个输入字段,即'keyword'和'keyword1'。

仅当关键字和关键字1与数据库中“ caseno”和“ year”列(单行)中已经存在的值完全匹配时,才显示结果。

例如,如果用户将684用作关键字,将2007用作关键字1,则查询应获取caseno列的值为684和year列的值为2007的行的数据。

我的问题是,假设我将684作为关键字,而在keyword1中什么也没有,即使它显示的是包含684的行,如果我将684作为关键字,而将2010作为关键字1的话,即使它正在显示包含684的行。

希望显示“ caseno”为684(用户定义的关键字)和“ year”为2007(用户定义的关键字)的行的数据。

尝试过以下代码:-

<?php

   $db_host="";
   $db_user="";
   $db_pass="";
   $db_name="";

   $db = new mysqli($db_host, $db_user, $db_pass, $db_name);

   if($db->connect_error){
       die("Connection failed: " . $db->connect_error);
   }

   ?>
   <?php

   if(!empty($_POST))
   {
   $aKeyword = explode(" ", $_POST['keyword']);
   $bKeyword = explode(" ", $_POST['keyword1']);
   $query ="SELECT * FROM cav WHERE caseno like '%" . $aKeyword[0] . "%' AND 
   year like '%".$bkeyword[0]."%'";

   $result = $db->query($query);

   if(mysqli_num_rows($result) > 0) {
   $row_count=0;

   echo '<br><br><br><br><br>
   <center><table class="table-1 mt-2 table-responsive table border="1" 
   table-bordered"><TABLE BORDER=2 BORDERCOLOR=BLACK font size="2">
   <tr>
   <th>S.No.</th>
   <th>Case Type</th>
   <th>Case No.</th>
   <th>Year</th>
   <th>Petitioner Name</th>
   <th>Respondent Name</th>
   <th>First Coram</th>
   <th>Second Coram</th>
   <th>Third Coram</th>
   <th>Written By</th>


   </tr></center> ';
   While($row = $result->fetch_assoc()) {   
   $row_count++;  
   echo "<tr><td> ".$row_count." </td><td>". $row['casetype'] . "</td><td>". 
   $row['caseno'] . "</td><td>". $row['year'] . "</td><td>". 
   $row['petitioner'] . "</td><td>". $row['respondent'] . "</td><td>". 
   $row['firstcoram'] . "</td><td>". $row['secondcoram'] . "</td><td>". 
   $row['thirdcoram'] . "</td><td>". $row['writtenbycoram'] . "</td>  
   </tr>";
   }
   echo "</table>";
   }
   else {
   echo "<br>Result Found: NONE";
   }
   }

   ?>
   html form is 
   <input type="text" name="keyword" autocomplete "off">
   <input type="text" name="keyword1" autocomplete "off">
   <input type="submit" value="Search"><FORM><INPUT Type="button" 
   VALUE="Back" onClick="history.go(-1);return true;">

仅当两列的值(“ caseno”和“ year”)与用户指定的关键字完全匹配时,才希望显示结果。如果用户只输入684或仅输入2007或684和2010或784和2007,则将显示“未找到结果”

1 个答案:

答案 0 :(得分:0)

我认为这里的代码可以很轻松地解决您的问题,因为我发现您只是缺少几点以使其按需工作。我还使其余代码更易于管理

$html = '';
    if(!empty($_POST))
    {
        $aKeyword = explode(" ", $_POST['keyword']);
        $bKeyword = explode(" ", $_POST['keyword1']);

    $query = 'SELECT * FROM cav WHERE caseno LIKE "%'.$aKeyword[0].'%" OR caseno LIKE "%'.$bKeyword[0].'%"';
    $result = $db->query($query);

    if(mysqli_num_rows($result) > 0) {
        $row_count=0;

        $html .= '<br><br><br><br><br>';
        $html .= '<center><table class="table-1 mt-2 table-responsive table border="1" 
        table-bordered"><table border="2" bordercolor="black" font-size="2">';
        $html .= '<tr>
        <th>S.No.</th>
        <th>Case Type</th>
        <th>Case No.</th>
        <th>Year</th>
        <th>Petitioner Name</th>
        <th>Respondent Name</th>
        <th>First Coram</th>
        <th>Second Coram</th>
        <th>Third Coram</th>
        <th>Written By</th>';


        $html .= '</tr></center> ';

        While($row = $result->fetch_assoc()) {  
            $row_count++;  
            $html .= '<tr><td> '.$row_count.' </td><td>'. $row['casetype'] . '</td><td>'. 
            $row['caseno'] . '</td><td>'. $row['year'] . '</td><td>'. 
            $row['petitioner'] . '</td><td>'. $row['respondent'] . '</td><td>'. 
            $row['firstcoram'] . '</td><td>'. $row['secondcoram'] . '</td><td>'. 
            $row['thirdcoram'] . '</td><td>'. $row['writtenbycoram'] . '</td>  
            </tr>';
        }
        $html .= '</table>';
    }
    else {
        $html .= '<br>No results found';
    }
}
echo $html;

您的问题是使用 AND ,而不是使用 OR