php - 尝试使用 PHP 创建动态生成的 mySQL select 语句

标签 php mysql select

我有 5 个变量,可以是 true 或 false,并且我必须为每个不同的可能结果生成不同的 sql SELECT 语句。现在我有大量的 if else 语句,但我想知道是否有更聪明的方法来做到这一点?

例如,我有

if (x=true AND y=false AND z=false AND a=false AND b =false) {
    $sql= "SELECT...."
} else if(x=true AND y=true AND z=false AND a=false AND b=false) {
    $sql= "SELECT...."
}

第一个选择语句是如果用户输入文本并且没有选择其他任何内容:

$sql="SELECT CompanyName, Keywords, Product, Industry, Link, region, hot FROM searchtest_tbl WHERE Keywords LIKE '%$formSearch%' OR CompanyName LIKE '%$formSearch%' OR Product LIKE '%$formSearch%' OR Industry LIKE '%$formSearch%' ORDER BY hot DESC, CompanyName";

此声明适用于他们仅从“行业”下拉列表中选择的情况:

$sql="SELECT CompanyName, Product, Industry, Link, hot, region FROM searchtest_tbl WHERE Industry='$formIndustry' ORDER BY hot DESC, CompanyName";

如果他们输入文本,选择一个行业,但没有选择其他任何内容,则如下:

$sql="SELECT CompanyName, Product, Industry, Link, hot, region FROM searchtest_tbl WHERE Industry='$formIndustry' AND (Keywords LIKE '%$formSearch%' OR CompanyName LIKE '%$formSearch%' OR Product LIKE '%$formSearch%') ORDER BY hot DESC, CompanyName";

其余的基本上都是这样,但是如果选择了其他字段,则会显示 WHERE Product='$formProduct' AND.... 等

最佳答案

也许您可以将逻辑分解为更小的组件。例如,如果 x=true 对应于 select 语句的特定部分,而 y=false 对应于不同部分,则逐段构建 select 语句:

$sql_statement = "SELECT ";

$sql_statement .= ($x) ? "`column_a` " : "`column_a`, `column_b` ";

$sql_statement .= "FROM ";

$sql_statement .= ($y) ? "`table_a` " : "`table_b` ";

如果这种方法不适合您,您可以发布额外的代码以便我们做出更好的判断吗?

关于php - 尝试使用 PHP 创建动态生成的 mySQL select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6332601/

相关文章:

mysql - 表 1 包含名字和姓氏,表 2 包含两列引用表 1 上的名称

wordpress - 自定义 WooCommerce 数量选择器

php - 通过ajax传递动态值

mysql - 语法是什么

php - 使用 PHP 的 mySQL 表中的增量主键

mysql在同一张表上得到两个总和的差

php - 如何以正确的方式在mysql中创建存储过程

PHP 准备好的语句无法分配正确的值

php - Cakephp 错误消息可能是我的 .htaccess 文件

php - [0-9]+ 和 [0-9]++ 有什么区别?