Инкрементное значение в mysql запросе на обновление

Я сделал этот код для того, чтобы выделить +1 точку, но это не работает правильно.

mysql_query("
    UPDATE member_profile 
    SET points= ' ".$points." ' + 1 
    WHERE user_id = '".$userid."'
");

переменная $points является точками пользователя прямо сейчас.. Я хочу это к плюс одно к нему.. так пример, если он имел как 5 точек, это должно быть 5+1 = 6.. но это не делает, это просто изменяется на 1

Что я сделал неправильно?спасибо

125
задан zessx 17 September 2013 в 07:32
поделиться

6 ответов

Вы также можете просто сделать это:

mysql_query("
    UPDATE member_profile 
    SET points = points + 1
    WHERE user_id = '".$userid."'
");
292
ответ дан 24 November 2019 в 00:56
поделиться

Как с помощью регулярного выражения найти все пробелы, а затем усечь на матче, который является наибольшим, но все же меньше или равен вашей желаемой длине.

function truncate($text, $length) {
    $length = abs((int)$length);

    $count = preg_match_all("(\s+)", $text, $matches, PREG_OFFSET_CAPTURE);

    while ($count > 0) {
       if ($matches[$count][0] <= $length) {
          $length = $matches[$count][0];
          break;
       }    
       $count = $count - 1;
    }

    return substr($text, 0, $length)
}
-121--4716307-
  1. При работе PuTTyg щелкните правой кнопкой мыши значок в верхнем левом углу и выберите «Change Settings»...
  2. В области «Category» в разделе «Window» выберите Translation.
  3. Измените предполагаемый набор символов на UTF-8, как показано на рисунке ниже:

PuTTYcyg configuration

Не забудьте сохранить новые настройки по умолчанию на странице Сеанс. Нажмите Применить и наслаждайтесь!

-121--4859454-

Надеюсь, что я не буду оффтопичным на моем первом посту, но я хотел бы немного расширить на литье целочисленного в строку, так как некоторые респонденты, кажется, неправильно.

Поскольку выражение в этом запросе использует арифметический оператор (символ плюс +), MySQL преобразует любые последовательности в выражении в числа.

Чтобы продемонстрировать, следующее приведет к результату 6:

SELECT ' 05.05 '+'.95';

Для конкатенации строк в MySQL требуется функция CONCAT (), поэтому здесь нет двусмысленности, и MySQL преобразует строки в плавающие и добавляет их вместе.

Я на самом деле думаю, что причина, по которой первоначальный запрос не работал, скорее всего, потому, что переменная $ points на самом деле не была установлена в текущие точки пользователя. Он был либо установлен в ноль, либо не установлен: MySQL приведет пустую последовательность к нулю. Для иллюстрации 0 вернётся следующее:

SELECT ABS('');

Как я уже сказал, я надеюсь, что не буду слишком не-тематично. Я согласен, что у Даана и Томаша есть лучшие решения для этой конкретной проблемы.

10
ответ дан 24 November 2019 в 00:56
поделиться

Вы можете сделать это, не запрашивая фактическое количество баллов, поэтому сэкономит вам время и ресурсы при выполнении скрипта.

mysql_query("UPDATE `member_profile` SET `points`= `points` + 1 WHERE `user_id` = '".intval($userid)."'");

Иначе, что вы делали неправильно, так это то, что вы передали старое количество очков в виде строки ( points = '5' + 1 ), и вы не можете добавить число в строку. ;)

21
ответ дан 24 November 2019 в 00:56
поделиться

Удалите ' вокруг точки :

mysql_query("UPDATE member_profile SET points=".$points."+1 WHERE user_id = '".$userid."'");

Вы «преобразуете» целочисленное значение в строку в исходном запросе ...

1
ответ дан 24 November 2019 в 00:56
поделиться

Почему бы вам не позволить PHP выполнить эту работу?

"UPDATE member_profile SET points= ' ". ($points+1) ." '  WHERE user_id = '".$userid."'"
-1
ответ дан 24 November 2019 в 00:56
поделиться
"UPDATE member_profile SET points = points + 1 WHERE user_id = '".$userid."'"
7
ответ дан 24 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: