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删除我的:)它是相同的