我在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/