php - MySQL选择多条件

标签 php mysql

作为初学者,我一直在努力寻找解决以下情况的方法:

我有 3 个表:

Table 1: CITIES 
id|city
1|London
2|Paris


Table 2: CATEGORIES 
id|category
1|category1
2|category2

Table 3: PRODUCTS 
id|city|category|name|keyword
1|1|1|product1|keyword1
2|1|1|product2|keyword2

现在我需要帮助 mysql select 来显示搜索结果,像这样:

<?php
$keyword = preg_replace('#[^a-zA-Z]#', '', $_GET['keyword']);
$city = preg_replace('#[^0-9]#', '', $_GET['city']);
$category = preg_replace('#[^0-9]#', '', $_GET['category']);

$result = mysqli_query($con,"SELECT * FROM products WHERE category = '$category' AND city = '$city' AND keyword LIKE '$keyword'");
while($row = mysqli_fetch_array($result)) {
$id = $row['id'];
$name = $row['name'];
$category = $row['category'];
$city = $row['city'];
}
?>

我的网址是:search.php?keyword=keyword&category=1&city=1 这工作正常,但如果缺少任何参数,则显示 0 个结果

sample: search.php?keyword=&category=&city=1

最佳答案

您需要下面的动态 sql 生成检查示例:

$query = "SELECT * FROM products WHERE 1=1"; // note default case, always true
if ($category)
    $query .= " AND category = ".intval($category, 10); // note intval
if ($city)
    $query .= " AND city = ".intval($city, 10);
if ($keyword)
    $query .= " AND keyword LIKE '%" . mysqli_real_escape_string($keyword). "%'"; // note escaping
$result = mysqli_query($con, $query);

更新:您可以对 JOINS 查询使用相同的方法,检查一下:

$query = "SELECT *
    FROM PRODUCTS
    inner join
    CATEGORIES on (PRODUCTS.category = CATEGORIES.id)
    inner join
    CITIES on (PRODUCTS.city = CITIES.id)
    WHERE 1=1";

关于php - MySQL选择多条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23446873/

相关文章:

php - 检查数组的每个部分是否为数字

php - 德鲁帕尔 7 : Sharing authentication with HTTP-Auth

java - kubernetes 状态集连接

java - Hibernate 抛出无法删除或更新父行异常

php - 哪些技术是在线实时聊天应用程序的最佳选择?

php - foreach: "in"诉 "as"

php - 如何从数据库中选择数据并将其用作下一页中的变量?

php - 在这种情况下,只有 `namespace` 是什么意思?

mysql - 如何对3个不同日期的子查询进行减法和除法?

jquery - 在 jQuery 中将 sql 表的单个元素集成为变量