php - 哪一个更好?何时或如果其他情况?

标签 php mysql codeigniter

我的情况是这样的:

情况是这样的:

public function get_opportunity($customer_id, $group_id, $action)
{
    $sql = "SELECT COUNT(transaction_id) AS total_transaction 
            FROM `transaction` 
            WHERE 
                CASE 
                    WHEN '$action' = 'view_all' THEN transaction_id IS NOT NULL
                    WHEN '$action' = 'view_group' THEN group_id IN($group_id) 
                    ELSE transaction_created_by = ? 
                END 
            ";

    $result = $this->db->query($sql, array($customer_id))->result_array();

    return ($result[0]['total_transaction']) ? $result[0]['total_transaction'] : 0;
}

如果其他是这样的:

public function get_opportunity($customer_id, $group_id, $action)
{
    if($action == "view_all")
        $condition = " transaction_id IS NOT NULL";
    else if($action == 'view_group')
        $condition = " group_id IN($group_id)";
    else
        $condition = " customer_id = ?";

    $sql = "SELECT COUNT(transaction_id) AS total_transaction 
            FROM `transaction` 
            WHERE $condition";

    $result = $this->db->query($sql, array($customer_id))->result_array();

    return ($result[0]['total_transaction']) ? $result[0]['total_transaction'] : 0;
}

我已经尝试过了。上述工作的所有类型。但这里我想问一下,哪一个更好?

最佳答案

这是不对的,第一个代码不应该工作!在 SQL 中,CASE 是一个表达式,而不是一个语句。您不能在 THEN 部分添加条件,只能添加单个值。 MySQL 将 bool 表达式计算为 1\0 ,所以你的情况基本上是这样的:

WHERE CASE... THEN (Cond) -- equals to 1/0 
              THEN (Cond) -- equals to 1/0
              ELSE (Cond) -- -- equals to 1/0 

大多数 RDBMS 都会抛出错误。

您可以像这样格式化它:

SELECT COUNT(transaction_id) AS total_transaction 
            FROM `transaction` 
            WHERE ('$action' = 'view_all' AND transaction_id IS NOT NULL) OR 
                  ('$action' = 'view_group' THEN group_id IN($group_id)) OR
                  transaction_created_by = ?       

只要没有性能问题,就不要考虑这个事情, 它只会浪费你的时间。选择一个更容易维护的。

关于php - 哪一个更好?何时或如果其他情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38582874/

相关文章:

Codeigniter:如何对搜索结果进行分页

php - 如何在 javascript 函数内传递带有数据库值的 php 变量?

php - Heroku 和亚马逊 RDS 设置失败

php - 使用 Tidy 在 PHP 中验证 HTML5 文档

javascript - 来自 JavaScript 函数的 Ajax 异步和循环 PHP 请求

php - ajax-heavy Apache+Mysql+PHP站点的服务器优化

php - MySQL 在 codeigniter 中选择格式的日期

php - 无法在 Codeigniter 中发送电子邮件,没有错误消息。本地或远程

MySQL 嵌套 SELECT

mysql - MySQL中有 "UPDATE value IF NO SUCH ROW INSERT yyy"吗?