gpt4 book ai didi

php - 哪一个更好?情况何时或是否有其他情况?

转载 作者:行者123 更新时间:2023-11-29 01:37:08 24 4
gpt4 key购买 nike

我的情况是这样的:

情况是这样的:

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;
}

如果 else 是这样的:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com