Php 在MySQL中,如何从包含三个字段的搜索表单中检索多个值?

Php 在MySQL中,如何从包含三个字段的搜索表单中检索多个值?,php,mysql,Php,Mysql,我有两张桌子: 客户 城市 在搜索表单中,我有三个字段: 填写客户机名称的文本输入表单 选择框,用于选择要搜索的城市(表格城市) 另一个选择框,用于选择用户要搜索的主要业务(业务包括在客户表中) 根据表单字段的选择,它将从两个表中进行搜索 我考虑根据用户的选择执行多个SQL查询 问题是,用户可能不会在输入表单中填写客户的名称,或者可能会,但不会选择城市,等等 那么,根据用户的选择,我是否需要执行多个ifs来显示多个sql查询?也许我有一个不那么令人困惑的解决方案…也许可以修改您的数据库结构来帮助

我有两张桌子:

  • 客户
  • 城市
  • 在搜索表单中,我有三个字段:

  • 填写客户机名称的文本输入表单
  • 选择框,用于选择要搜索的城市(表格城市)
  • 另一个选择框,用于选择用户要搜索的主要业务(业务包括在客户表中)
  • 根据表单字段的选择,它将从两个表中进行搜索

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

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


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

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

    SELECT *
    FROM clients
    WHERE clients.city = {form result: cities.id}
    AND clients.business = {form result: businesses.id}
    ORDER BY clients.name
    LIMIT 0, 30
    
    现在假设用户没有填写其中一个字段(例如city),您有两种选择:通过验证用户输入强制他们填写,或者将其用作通配符,在这种情况下,您可以从查询中删除
    WHERE clients.city
    子句。假设您正在给城市的
    id的
    选项值

    在本例中,我将以编程方式构建查询:

    $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是您选择的过滤方法。

    只需使用您的条件查询数据库即可。如果客户机/城市确实存在,那么它们将显示出来,否则查询将返回一个空集。尽管很简单,但不需要验证其中任何一个的存在——例如,用户应该足够聪明,能够想出一个现有的城市名称


    您需要做的唯一一件事是mysql\u real\u escape\u string()。

    业务表已创建,但未连接到客户表。我的客户给了我一个access数据库供我使用,但它很旧,而且做得不好。在clients表中还有一个包含business的字段。有500家企业。如何将企业名称转换为id?制作excel并进行转换?我必须一个接一个地进行转换?我在Access方面没有做太多工作(我更愿意使用mysql/pgsql-您可以更轻松地将表转储为csv并尝试导入它们)。我不会将每个企业的名称用作id,而是为每个企业提供一个标识号(Access中的自动编号),并以此作为参考。