【发布时间】:2016-11-29 16:31:05
【问题描述】:
我的情况是这样的:
情况是这样的:
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;
}
我试过了。上述工作的所有类型。但在这里我问,哪个更好?
【问题讨论】:
-
为什么要在 MySQL 代码中放置基于 PHP 变量的条件?找出您要执行的查询,然后运行正确的查询。不要将其转储到您的数据库中。
-
另外,请不要内联任意值。尽可能使用prepared statements with placeholder values。
-
我猜这是他的代码的一个功能。只是比较哪个查询更好用。一个组合大声笑
-
通常按照期望从高到低的顺序:通过关联的
array(例如array('view_all' => 'transaction IS NOT NULL', ...))、switchstatement、if语句的长链查找。 -
@tadman,我已经尝试了上述两种方法并且它有效。我用mysql数据库
标签: php mysql codeigniter