【问题标题】:In MySQL how do retrieve multiple values from a Search form with three fields?在 MySQL 中,如何从具有三个字段的搜索表单中检索多个值?
【发布时间】:2010-10-20 07:05:09
【问题描述】:

我有两张桌子:

  1. 客户
  2. 城市

然后在搜索表单中我有三个字段:

  1. 用于填写客户姓名的文本输入表单
  2. 一个选择框,用于选择他们想要搜索的城市(表城市)
  3. 另一个选择框,用于选择用户想要搜索的主要业务(业务包含在客户表中)

根据表单字段的选择,它将从两个表中进行搜索。

我正在考虑根据用户选择执行多个 SQL 查询。

问题是用户可能不会在输入表单中填写客户名称,或者可能会,但不会选择城市等。

那么我是否必须根据用户选择执行多个 if 来显示多个 sql 查询?也许我有一个不那么令人困惑的解决方案......

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    也许您的数据库结构可以更改以帮助您。例如,我假设您在城市和客户之间有关系。听起来企业类似于“技术”或“搜索”,在这种情况下,您是否可以拥有多个具有相同业务的客户?可能值得将业务移植到单独的表中,然后参考这些表。然后你可以有一个简单的查询,例如:

    SELECT *
    FROM clients
    WHERE clients.city = {form result: cities.id}
    AND clients.business = {form result: businesses.id}
    ORDER BY clients.name
    LIMIT 0, 30
    

    现在假设用户没有填写其中一个字段(例如城市),您有两个选择:通过验证用户输入强制他们填写或将其用作通配符,在这种情况下,您可以删除 @987654322查询中的 @ 子句。假设您从 Cities 中提供 id<select> 选项值。

    在这种情况下,我会以编程方式构建查询:

    $queryStr = 'SELECT * FROM clients';
    if (!empty($_POST['city']) && !empty($_POST['business'])) {
        $queryStr .= ' WHERE city = ' . filter($_POST['city']) . ' AND business = ' . filter($_POST['business']);
    } elseif (!empty($_POST['city'])) {
        $queryStr .= ' WHERE city = ' . filter($_POST['city']);
    } elseif (!empty($_POST['business'])) {
        $queryStr .= ' WHERE business = ' . filter($_POST['business']);
    } else {
        // pass
    }
    $queryStr .= ' ORDER BY name LIMIT 0, 30';
    

    其中 filter 是您选择的过滤方法。

    【讨论】:

    • 业务表已经创建,但未连接到客户表。我的客户给了我一个访问数据库供我使用,但它很旧而且制作得不好。在客户表中也有一个业务字段。有500家企业。如何将企业名称转换为 id?做个excel,做个转换?我要一个一个做?
    • 我没有在 Access 上做很多工作(我更愿意使用 mysql/pgsql - 将表转储为 csv 并尝试导入它们可能更容易)。我不会使用每个企业的名称作为 id,而是给每个企业一个标识号(Access 中的自动编号)并以此来引用它们。
    【解决方案2】:

    只需使用您的条件查询数据库。如果客户/城市确实存在,那么它们就会出现,否则查询将返回一个空集。就这么简单,无需验证其中任何一个是否存在 - 用户应该足够聪明,能够想出一个现有的城市名称。

    你唯一需要做的就是mysql_real_escape_string()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      相关资源
      最近更新 更多