我正在尝试搜索MYSQL数据库并在我的PHP页面中显示结果。
我正在使用Multiple Select dropdowns
来搜索mysql数据库。
像这样:
<select name="keyword">
<option></option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
</select>
<select name="keyword">
<option></option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
</select>
并且每个选择下拉列表看起来都是相同的,具有不同的值等。
我的mysql表看起来像这样:
id Material Lamination cat_name sub_cat_name product_name
1 metal gloss metals metal sheets flat metal
2 metals metal sheets flat metal
3 wood gloss woods wood sheets flad wood
4 woods wood sticks curved wood
etc etc...
正如您在上面的示例中所看到的,某些产品没有材质和 Lamination 值。
所以,我像这样搜索MYSQL:
if(isset($_POST['keyword'])){
foreach($_POST['keyword'] as $c){
if(!empty($c)){
$sql3 ="SELECT * FROM product_details WHERE sub_cat_name='$currentproduct' AND (Lamination LIKE '$c' OR Material LIKE '$c')";
$query3 = mysqli_query($db_conx, $sql3);
if (!$query3) {
die(mysqli_error($db_conx));
}
$productCount3 = mysqli_num_rows($query3); // count the output amount
if ($productCount3 > 0) {
while($row3 = mysqli_fetch_array($query3, MYSQLI_ASSOC)){
......................................
但是,当我从mysql数据库中获取结果时,它会以一种非常奇怪的方式显示它们。但主要问题是它显示具有sub_cat_name
值的其他项目,即使这些项目中没有材料和层压值!
我明白我在MYSQL查询中所做的是错误的,但我无法找到正确的方法!
实际上,我想要实现的只是显示从下拉列表中选择某些条件的项目....
有人可以就此提出建议吗?
提前致谢。
答案 0 :(得分:1)
因此,您有一堆关键字,并且您希望选择材料或层压与至少一个关键字匹配的所有产品。
在不改变太多代码的情况下执行此操作的一种简单方法是简单地将一堆OR
连接到您的mysql查询中。
$sql3 = "SELECT * FROM product_details WHERE sub_cat_name='$currentproduct' AND (";
$delimiter = "";
foreach($_POST['keyword'] as $c){
if(!empty($c)){
$c = mysqli_real_escape_string($db_conx, $c);
$sql3 .= $delimiter . " (Lamination='$c' OR Material='$c')";
$delimiter = " OR";
}
}
$sql3 .= ")";
这会给你一个相当长的查询,但它会包含所有条件。
SELECT * FROM product_details WHERE sub_cat_name='product' AND (
(Lamination='metal' OR Material='metal') OR (Lamination='wood' OR
Material='wood') OR (Lamination='gloss' OR Material='gloss') OR
(Lamination='glass' OR Material='glass'))
但是,如果您还想让用户不选择任何关键字,那么您需要在没有AND
的情况下执行单独的查询。
需要注意的一点是,我添加了mysqli_real_escape_string
以保护您的查询免受MySQL注入。