2014-02-02 4 views
0

У меня есть следующий запрос:Сложение работы, вычитание не

$stmt = $cxn->prepare("UPDATE comments SET counter = counter + 1 WHERE ? LIKE concat(path, '%')"); 
$stmt->bind_param('s', $path); 
$stmt->execute(); 

$path Где-то вроде 1/2/3/.

Этот запрос увеличивает счетчик штрафа для каждого результата, но если я изменил запрос на вычитание (counter = counter - 1), он фактически не вычитает, и я не уверен, почему. В конце концов, я меняю только одного оператора.

Что случилось?

+0

Попробуйте «counter + -1», чтобы увидеть, что произойдет. – barrycarter

+0

@barrycarter Все еще не удалось решить проблему. :/ – Bagwell

ответ

0

Решение этой проблемы заключалось в том, что я использовал целые числа без знака для counter, если счетчик уже был установлен в 0, запрос не будет работать.

Таким образом, либо вы должны проверить, что счетчик не равен 0, либо сделать его подписанным.

+0

Определить «не получилось бы». Что вы ожидали от этого? – Barmar

1

сделать это таким образом, который является метод я использую:

SET `counter` = (`counter` - 1) 

и другой метод:

SET counter = (counter-1) 

EDIT:

Ваш пункт WHERE должен быть более точным.

Ie: WHERE column=column_to_change вместо просто WHERE ?

Вот мой рабочий кусок кода:

UPDATE `mytable` SET `fieldname` = (`fieldname` - 1) WHERE `some_id` = 1 
+1

Пробовал оба, ни работал. :/ – Bagwell

+0

Действительно? Это то, что я использую сам, и это работает. @Bagwell Вам может потребоваться использовать более точный метод, например 'WHERE column = column_to_change', который есть у меня. Вместо 'WHERE?' –

+0

Плюс, честно говоря, я не знаю, кто и почему ниспроверг это, это «рабочий код» из одного из моих сценариев. –

Смежные вопросы