1

我有一些适用于 3 个下拉框的搜索功能。根据选择的标准,返回一个配置文件。3个下拉菜单是:

  • 选区
  • 性别

现在我正在尝试构建一个查询,但刚刚意识到实际上一个人不必从每个下拉列表中选择一个选项,我也不希望他们这样做。

因此,例如,在从每个下拉列表中选择一个选项之前,我不想禁用搜索按钮。

从任何下拉列表中选择了一个值,并且可能根本没有从任何下拉列表中选择任何值,然后单击搜索按钮,我试图了解如何处理未知组合。

我的第一个想法是我可以使用真值表之类的东西,但我认为这只是矫枉过正,实际上这是一个非常常见的功能。

然后我想也许我可以有类似的东西:

$county = "$_GET['county'];";
$constituency = "$_GET['constituency'];";
$gender = "$_GET['gender'];";

然后我可以检查它们是否为空并以某种方式使用这个值,例如

if($county !== '') {
  ???SOMEHOW MAKE USE OF THIS IN AN SQL QUERY???
  PERHAPS PASS IT TO ANOTHER PARAMETER
  $sqlparams = "county = '$county'";
}

SELECT * FROM profile
WHERE {$sqlparams};

我认为我在正确的轨道上,但可以使用一些指导。

非常感谢所有帮助。

4

4 回答 4

1

这应该是你想要的,我想。

<?php
$tooLookFor = array("county", "constituency", "gender");
foreach($tooLookFor as $key){
    if(isset($_GET[$key]) && strlen($_GET[$key])>0){
        $queryParams[] = $key.'="'.$_GET[$key].'"';
    }
}
$query = "SELECT * FROM profile WHERE ".implode(' AND ', $queryParams);
?>
于 2012-09-26T01:02:20.300 回答
1

您可以执行以下操作:

$county = $_GET['county'];
$constituency = $_GET['constituency'];
$gender = $_GET['gender'];

$sqlparams = array();

if($county !== '') {
    $sqlparams[] = "county = '$county'";
}
if($constituency !== '') {
    $sqlparams[] = "constituency = '$constituency'";
}
if($gender !== '') {
    $sqlparams[] = "gender = '$gender'";
}

$query = "SELECT * FROM profile";

if (count($sqlparams) > 0) {
    $query .= " WHERE " . implode(" AND ", $sqlparams); 
}
于 2012-09-26T01:04:09.893 回答
0

你可以这样做:

$where = array();

//repeat as needed
$where[$column] = $value;

$where2 = array();
foreach($where as $key => $value){
    $where2[] = "$key = '$value'";
}

$where_string = implode(' AND ', $where2);

$where_string后面会有要插入的字符串WHERE

于 2012-09-26T01:02:47.073 回答
0

是的,你在正确的轨道上,你只是还没有在正确的开关上。;)

在您知道必须使用什么之前,您无法构建查询。因此,首先,在您的验证中,确定(正如您所做的那样)关键字实际上是什么以及它们代表什么字段。大概这些映射到表中的字段,也许是 3 个表?重点是,您的查询将需要动态构建。

于 2012-09-26T01:02:50.087 回答