我有一个网页,用户可以使用 5 个不同的输入字段搜索 mysql 数据库,每个输入字段都匹配 mysql 表的一列。到目前为止,他们可以搜索数据库,但所有字段都必须与表中的内容完全匹配,一大堆 LIKE 和 AND 语句,才能返回任何结果。我想要做的是,如果他们只知道前两个字段,而不是数据库返回包含给定信息的所有实例。此外,如果用户填写的字段多于前两个字段,则查询将考虑这一点,并返回与给定信息匹配的所有结果。我查看了加权搜索,我认为这会让我接近我需要的结果,但在我看来,加权搜索总是会返回结果,只是更准确的搜索会在顶部,如果没有找到结果,我正在做的事情不应该返回任何结果。如果你们可以帮助我编写代码,我将不胜感激。
问问题
393 次
2 回答
0
使用 PHP 部分构建查询,如果存在值,则添加所需的部分。所以是这样的:
$sql = "SELECT * FROM table WHERE 1";
$sql = .= (if(isset($_POST['field1']) && $_POST['field1'])?' AND field1='{$_POST['field1']}':'';
//etc
显然,这是一个基本示例,不应按原样使用。您必须确保在查询中使用用户提供的输入之前对其进行清理。
于 2013-01-09T16:55:05.173 回答
0
您必须先找出哪些参数不为空:
foreach $_POST as $param {
$params[] = $param;
}
那么你必须为 WHERE attr 做一个长表达式:
$query = "";
foreach $params as $param_name=>$param {
$query .= " && ".$param_name."=".$param;
}
// output: " && age=15 && gender=female && eyes=brown"
最后在开始时制作一个没有“&&”的SELECT:
$query = "SELECT * FROM table WHERE".substr($query,3);
于 2013-01-09T17:17:26.180 回答