PHP MySQL+;基于非表单选择创建搜索查询

PHP MySQL+;基于非表单选择创建搜索查询,php,mysql,Php,Mysql,我有一个HTML表单,人们可以选择部分或全部关闭来搜索数据库中的成员配置文件 其中一些选择是: 男/女 年龄 位置 如意向或利益等复选框 等 我需要定制一个MySQL查询,以满足成员选择的内容 我这样问是因为我以前建立了一个像这样的自定义搜索,它变成了一个完全混乱的多个查询,取决于选择了什么 是否最好只构建一个查询,并根据所选内容添加部分 有没有人举过拉夫的例子 数据库架构: 我有许多包含相关信息的表,所以我需要使用联接。也就是说,所有东西都在一个主键PID上工作,因此它将在此基础上加入。

我有一个HTML表单,人们可以选择部分或全部关闭来搜索数据库中的成员配置文件

其中一些选择是:

  • 男/女
  • 年龄
  • 位置
  • 如意向或利益等复选框
我需要定制一个MySQL查询,以满足成员选择的内容

我这样问是因为我以前建立了一个像这样的自定义搜索,它变成了一个完全混乱的多个查询,取决于选择了什么

是否最好只构建一个查询,并根据所选内容添加部分

有没有人举过拉夫的例子


数据库架构:


我有许多包含相关信息的表,所以我需要使用联接。也就是说,所有东西都在一个主键PID上工作,因此它将在此基础上加入。

您可以这样做:

<?php
  $whereClause = '';
  if($_GET['gender'] == 'male'){
    $whereClause .= ' AND gender = "M"';
  }
  if($_GET['age'] != ''){
    $whereClause .= ' AND age = "'.$_GET['age'].'"';
  }
?>

您可以这样做:

<?php
  $whereClause = '';
  if($_GET['gender'] == 'male'){
    $whereClause .= ' AND gender = "M"';
  }
  if($_GET['age'] != ''){
    $whereClause .= ' AND age = "'.$_GET['age'].'"';
  }
?>

您可以这样做:

<?php
  $whereClause = '';
  if($_GET['gender'] == 'male'){
    $whereClause .= ' AND gender = "M"';
  }
  if($_GET['age'] != ''){
    $whereClause .= ' AND age = "'.$_GET['age'].'"';
  }
?>

您可以这样做:

<?php
  $whereClause = '';
  if($_GET['gender'] == 'male'){
    $whereClause .= ' AND gender = "M"';
  }
  if($_GET['age'] != ''){
    $whereClause .= ' AND age = "'.$_GET['age'].'"';
  }
?>

我会使用数组:

$where = array();
if($_GET["gender"]!=""){
  $clean = mysqli_escape_string($db, $_GET["gender"]);
  array_push($where, "gender = '$clean'");
}
// etc...
$where = implode(" AND ", $where);
$sql = "SELECT * FROM table WHERE $where";
我将使用一个数组:

$where = array();
if($_GET["gender"]!=""){
  $clean = mysqli_escape_string($db, $_GET["gender"]);
  array_push($where, "gender = '$clean'");
}
// etc...
$where = implode(" AND ", $where);
$sql = "SELECT * FROM table WHERE $where";
我将使用一个数组:

$where = array();
if($_GET["gender"]!=""){
  $clean = mysqli_escape_string($db, $_GET["gender"]);
  array_push($where, "gender = '$clean'");
}
// etc...
$where = implode(" AND ", $where);
$sql = "SELECT * FROM table WHERE $where";
我将使用一个数组:

$where = array();
if($_GET["gender"]!=""){
  $clean = mysqli_escape_string($db, $_GET["gender"]);
  array_push($where, "gender = '$clean'");
}
// etc...
$where = implode(" AND ", $where);
$sql = "SELECT * FROM table WHERE $where";

你的DB模式看起来怎么样?你的DB模式看起来怎么样?你的DB模式看起来怎么样?你的DB模式看起来怎么样?是的,但正如你所看到的,我把和放在每个字符串的最前面,所以这取决于where子句中已经有了类似于
where id=1'.$where子句'.
的内容。如果没有,您仍然可以使用它,但可以稍微更改一下。但是,正如您所看到的,我在每个字符串的开头加上了AND,所以这取决于where子句中已经有了类似于
where id=1'.$where子句'.
的内容。如果没有,您仍然可以使用它,但可以稍微更改一下。但是,正如您所看到的,我在每个字符串的开头加上了AND,所以这取决于where子句中已经有了类似于
where id=1'.$where子句'.
的内容。如果没有,您仍然可以使用它,但可以稍微更改一下。但是,正如您所看到的,我在每个字符串的开头加上了AND,因此,这取决于where子句中已经有了类似于
where id=1.$whereClause.
的内容。如果没有,您仍然可以使用它,但可以稍微更改一下