From 727e4ff282623ce71df6c3700debf75029e5eb41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20T=C3=A4nzer?= Date: Thu, 29 Apr 2010 21:55:57 +0200 Subject: [PATCH] db->update() sucks for complicated where clauses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Tänzer --- .../controllers/AddPointsController.php | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/manager/application/controllers/AddPointsController.php b/manager/application/controllers/AddPointsController.php index b7f3541..7003e41 100644 --- a/manager/application/controllers/AddPointsController.php +++ b/manager/application/controllers/AddPointsController.php @@ -102,17 +102,16 @@ class AddPointsController extends Zend_Controller_Action // Fix the assurer flag - $where = array(); - $query = '`users`.`id` = ?'; - $where[] = $this->db->quoteInto($query, $user['id']); - $query = 'exists(select * from `cats_passed` as `cp`, ' . - '`cats_variant` as `cv` where `cp`.`variant_id` = `cv`.`id` and ' . - '`cv`.`type_id` = 1 and `cp`.`user_id` = ?'; - $where[] = $this->db->quoteInto($query, $user['id']); - $query = '(select sum(`points`) from `notary` where `to`= ? and ' . - '`expire` > now()) >= 100'; - $where[] = $this->db->quoteInto($query, $user['id']); - $this->db->update('users', array('assurer' => 1), $where); + $query = 'UPDATE `users` SET `assurer` = 1 WHERE `users`.`id` = :user AND '. + + 'EXISTS(SELECT * FROM `cats_passed` AS `cp`, `cats_variant` AS `cv` '. + 'WHERE `cp`.`variant_id` = `cv`.`id` AND `cv`.`type_id` = 1 AND '. + '`cp`.`user_id` = :user) AND '. + + '(SELECT SUM(`points`) FROM `notary` WHERE `to` = :user AND '. + '`expire` < now()) >= 100'; + $query_params['user'] = $user['id']; + $this->db->query($query, $query_params); return; }