我有两张桌子:
客户
城市
在搜索表单中,我有三个字段:
填写客户名称的文本输入表单
一个选择框,用于选择要搜索的城市(表格城市)
另一个选择框,用于选择用户要搜索的主业务(业务包含在clients表中)
根据表单字段的选择,它将从两个表中进行搜索。
我在考虑根据用户的选择执行多个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子句。假设你给了一个来自城市的<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是您选择的过滤方法。

关于php - 在MySQL中,如何从具有三个字段的搜索表单中检索多个值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/763510/

10-16 23:19