Php MySQL选择多个条件

Php MySQL选择多个条件,php,mysql,Php,Mysql,作为初学者,我一直在努力寻找以下情况的解决方案: 我有三张桌子: 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选择以显示

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

我有三张桌子:

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选择以显示搜索结果,如下所示:

<?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'];
}
?>

您在此处输入错误。请将
$
符号添加到城市变量。这应该是您没有得到任何结果的原因

$city = preg_replace('#[^0-9]#', '', $_GET['city']);

您在此处输入错误。请将
$
符号添加到城市变量。这应该是您没有得到任何结果的原因

$city = preg_replace('#[^0-9]#', '', $_GET['city']);

您需要以下动态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);
更新:对于带有联接的查询,可以使用相同的方法,请检查以下内容:

$query = "SELECT *
    FROM PRODUCTS
    inner join
    CATEGORIES on (PRODUCTS.category = CATEGORIES.id)
    inner join
    CITIES on (PRODUCTS.city = CITIES.id)
    WHERE 1=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);
更新:对于带有联接的查询,可以使用相同的方法,请检查以下内容:

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

如果使用或代替AND怎么办?使用或代替AND。并希望所有参数都到位。请编辑您的问题以显示示例数据。数据结构没有意义。您有带键的引用表,但
product
表似乎存储的是字符串而不是ID。@AbhikChakraborty hmm似乎是搜索的好主意,但如何打印城市名称,我是否需要在查询中创建一个新查询?@Elona使用join显示城市名称和类别名称的相同名称如果使用或而不是and怎么办?使用或而不是and。并希望所有参数都到位。请编辑您的问题以显示示例数据。数据结构没有意义。您有带键的引用表,但
product
表似乎存储的是字符串而不是ID。@AbhikChakraborty hmm似乎是搜索的好主意,但如何打印城市名称,我需要在查询中创建新查询吗?@Elona使用join显示城市名称和类别名称的相同。我现在明白了,谢谢,但这能像加入吗?要显示城市名称吗?啊,你已经发布了答案+1删除我的:)是sameaha我现在明白了,谢谢,但这能像加入吗?要显示城市名称吗?啊,你已经发布了答案+1删除我的:)它是相同的