我在mysql中有数据库表cav。

我需要使用基于两个关键字的php获取结果,这两个关键字将在两列中进行搜索。 “ caseno”和“ year”。

在用户表单中,我提供了两个输入字段,即“关键字”和“关键字1”。

希望仅在keyword和keyword1与数据库中“ caseno”和“ year”列(单行)中已经存在的值完全匹配时显示结果。

例如,如果用户将684用作关键字,将2007用作keyword1,则查询应获取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,则将显示“未找到结果”

最佳答案

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

$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

关于php - php-mysql-需要匹配两个相互补充而不是独立的关键词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55310330/

10-16 18:12