我有一个网页,用户可以使用5个不同的输入字段搜索mysql数据库,每个输入字段与mysql表的列匹配。截至目前,他们可以搜索数据库,但是所有字段都必须与表中的内容,LIKE和AND语句的完整匹配,以便返回任何结果。我想要做的是,如果他们只知道前两个字段,那么数据库将返回包含给定信息的所有实例。此外,如果用户填写的字段多于前两个字段,则查询将考虑该字段并返回找到的所有匹配所有信息的结果。我查看了加权搜索,我认为这会让我接近我需要的东西,但在我看来,加权搜索总是会返回一个结果,只有更准确的一个会在顶部,以及我正在做的事情没有找到结果,不应返回任何结果。如果你们可以帮我解决这个问题,我会非常感激。
答案 0 :(得分:0)
使用PHP构建部分查询,并在存在值时添加所需的部分。所以像这样:
$sql = "SELECT * FROM table WHERE 1";
$sql = .= (if(isset($_POST['field1']) && $_POST['field1'])?' AND field1='{$_POST['field1']}':'';
//etc
显然这是一个基本的例子,不应该按原样使用。在查询中使用之前,必须确保清理用户提供的输入。
答案 1 :(得分: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"
最终没有“&&&”进行选择在开始时:
$query = "SELECT * FROM table WHERE".substr($query,3);