我在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,则将显示“未找到结果”
答案 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