【问题标题】:Create multiple MySQL filters with PHP and HTML Select使用 PHP 和 HTML Select 创建多个 MySQL 过滤器
【发布时间】:2016-10-31 08:56:00
【问题描述】:

我正在尝试创建一个 PHP 脚本来过滤来自 MySQL 数据库的数据。过滤器是使用 HTML Select 标签选择的。

问题是,有很多过滤器,用户只能选择其中的一部分。我很困惑如何使用 PHP 来动态调整 MySQL 选择语句,以便它只使用用户选择的那些过滤器。也就是说,如果用户选择 SchoolType 和 District。查询是这样的:

"SELECT * FROM mydatabase 
 WHERE SchoolType='SelectedSchoolType' 
   AND District='SelectedDistrict'"

然后如果用户在过滤器中也选择了县,则 SQL 语句调整为:

"SELECT * FROM mydatabase 
 WHERE SchoolType='SelectedSchoolType' 
   AND District='SelectedDistrict' 
   AND County='SelectedCounty'"

如何使 SQL 语句根据选择的过滤器进行调整?

【问题讨论】:

  • 我怎样才能使 SQL 语句根据选择的过滤器进行调整? 选择了哪些过滤器 也许您还应该向我们展示用户所在的表单选择这些过滤器
  • 点击问题下方的“编辑”,粘贴 HTML 和 PHP 代码,保存问题。

标签: php mysql


【解决方案1】:

在您的 PHP 页面上,您需要:

  1. 检查选择值(开关)
  2. 从这些选择中构建您的查询(我使用了 implode)
  3. 运行您的查询(像往常一样)

例子:

<?php
$sql = "Select * FROM mydatabase";
$conditions = array();
switch($_POST['select_1']){//you can have mutiple switches
    case "school":
        $conditions[] = "SchoolType = '".$_POST['select_1_text']."'";
        break;
    case "district":
        $conditions[] = "District = '".$_POST['select_1_text']."'";
        break;
    //etecetera
}
if(count($conditions)){
    $sql.= " WHERE ";
    $sql.=implode(" AND",$conditions);
}
//Run your query

查看this动态查询相关问题

【讨论】:

    【解决方案2】:

    所以首先您需要将过滤器类型 id 和选定的值发送到服务器端。例如,您可以使用 jquery(选择 1 个值):

    $.ajax({
      method: "POST",
      url: "path_to_your_script",
      data: {
        type: $("your_element:selected").val(), 
        filter : $("your_element:selected").text()}
      });
    

    然后在服务器端,您可以为您的数据库动态创建查询:

    <?php
    $input_filter = $_POST['filter'];
    $my_mapped_type = get_mapped_type($_POST['type']); //for.ex. you store it in db
    $base_query = "SELECT * FROM mydatabase";
    if(isset($input_filter) && isset($my_mapped_type)){
      $base_query .= " where $my_mapped_type = $input_filter";
    }
    

    因此,您将在 $base_query 中获得整个查询

    【讨论】:

    • 考虑到问题本身及其标签,我认为他不是在寻找 ajax 或 javascript 答案
    • 如果您不使用 ajax 或 javascript,那么您需要决定如何将用户选择的值发送到服务器端。你可以使用表单提交)
    • 我认为这是隐含的,看起来不像@Mishidoo 的问题,因为他在传递值方面没有困难,而是在动态构造查询方面遇到了困难
    猜你喜欢
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2010-12-10
    • 2021-12-01
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多