我有2个下拉列表,分别称为ddl1和ddl2,
当我选择ddl1时,它将填充该搜索的整个结果。
当我选择ddl2细化搜索时,不会进行任何更改。
如何从以下sql查询中获得精确的搜索
<?php
$q=$_GET["q"];
$p=$_GET["p"];
require 'connection.php';
mysqli_select_db($con,"Faults" );
//where statement in the sql syntax will select where in db to get infor, use AND to add another condition
$sql="SELECT Products.Product_Name, Versions.Version, Platform.Platform_Name, Issues.Issue, Issues.Sub_Issue, Issues.Fix
FROM Solutions
INNER JOIN Products
ON Solutions.Product = Products.Product_id
INNER JOIN Versions
ON Solutions.Product_Version = Versions.Version_id
INNER JOIN Platform
ON Solutions.Product_Platform = Platform.Platform_id
INNER JOIN Issues
ON Solutions.Product_Issue = Issues.Issue_id
WHERE Product = '".$q."'
OR (Product_Issue = '".$p."'
OR Product_Issue ='".$p."')";
$result = mysqli_query($con,$sql);
//below is the echo statment to create the results in a table format, list collumn titles
echo "<table id=tables border='1'>
<tr>
<th>Products</th>
<th>Version</th>
<th>Platform</th>
<th>Issue</th>
<th>Sub Issue</th>
<th>Fix</th>
</tr>";
//below is script to list reults in a table format, $row [row name on table]
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['Product_Name'] . "</td>";
echo "<td>" . $row['Version'] . "</td>";
echo "<td>" . $row['Platform_Name'] . "</td>";
echo "<td>" . $row['Issue'] . "</td>";
echo "<td>" . $row['Sub_Issue'] . "</td>";
echo "<td><a href=\"idfix.php?Fix=" . nl2br($row['Fix']) . "\">Fix</a></td>";
echo "</tr>";
}
echo "</table>";
// below closes the coonection to mysql
?>
JS代码
function showUser(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getuser.php?q="+ product.value +"&" +"p="+ issue.value ,true);
xmlhttp.send();
}
最佳答案
我假设$ q是下拉列表1的值,而$ p是下拉列表2的值。
一种实现所需目标的方法是,在ddl2中未选择任何值的情况下,将$ p缺省设置为LIKE
通配符,然后如果选择了某些内容,则只需输入ddl2值即可。
您查询的最后一部分可能就是:
WHERE Product = '".$q."'
AND Product_Issue LIKE '".$p."'
因此,如果未选择ddl2值,则将得到一个
LIKE '%'
,该值基本上不会被过滤;如果选择了某些内容,则将得到一个LIKE 'value'
,该值通常等效于当前要使用的= 'value'
(存在一些差异,但通常不会影响像这样的一般查询)。使用LIKE
还应该允许您设置的任何表索引也可以继续工作。要查看
LIKE
与=
的任何影响,请参见http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like您也可以根据对ddl2值的选择,动态地(添加到查询字符串中)添加查询的ddl2部分。
关于php - sql筛选多个下拉列表上的搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18423911/