Математика обновления mysql

скажем, p.products_price равно 1

Почему:

UPDATE products p
SET p.products_price = (1 + p.products_price)
WHERE p.products_id = 8

сделать p.products_price равным 3?

Он прибавляет 1 к цене, а затем повторяет все заново? Я пытаюсь сделать что-то более сложное, но когда это не сработало, я разбил его на самую простую вещь. Могу ли я сделать здесь какое-то временное значение и рассчитать новую цену, а затем установить ее на это значение?

Пожалуйста, помогите, я в ярости, Спасибо.

Версия клиента MySQL: 4.1.22

изменить: столбец имеет десятичный тип, я попробовал такое же обновление в столбце int с тем же результатом.

edit: это не работает в коде, поэтому нет шансов, что код вызовет одно и то же обновление дважды

У меня возникла такая же проблема, хотя кажется, что при обновлении рассматриваемой веб-страницы добавляется 2, но при начальной загрузке / запуске скрипта он добавляет 1 правильно. Это кому-нибудь подсказывает?

t1m0thy 14.12.2014 19:28
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
5
1
10 089
3

Ответы 3

Это определенно должно установить для products_price значение 2. Должно быть что-то еще.

Это похоже на Проблема с обновлением поля MySQL с помощью PHP, но там не было хорошего решения, поэтому я тоже оставлю это открытым.

Вы запускаете его из клиента или через скрипт?

Есть ли у вас открытые транзакции или другие скрипты для доступа к базе данных?

Обновлено: вы упомянули объединения в своем комментарии - я готов поспорить, что ваше соединение откатывает одну и ту же строку более одного раза.

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

Matthew Rapati 05.12.2008 23:43

Бьюсь об заклад, это объединения - вы должны выбирать одну и ту же строку более одного раза

Greg 05.12.2008 23:55

нет, я буквально запускаю sql выше, и он все еще делает это, даже если я говорю 'where product_id = 200' :(

Matthew Rapati 05.12.2008 23:56

Ой .. хромой ... можешь наклеить дамп структуры таблицы + данные (или хотя бы часть данных) и я попробую

Greg 06.12.2008 00:05

Ваш SQL выглядит нормально. Является ли столбец «что-то» уникальным? Убедитесь, что вы обновляете только одну запись.

что-то сейчас является идентификатором пользователя. есть только одна строка, которой соответствует это обновление. он говорит только об одной строке. возможно ли, чтобы одна и та же строка была обновлена ​​дважды?

Matthew Rapati 05.12.2008 23:48
UPDATE products    
SET products_price = (1 + products_price)    
WHERE products_id = 8

работает как надо (удален псевдоним таблицы 'p')

Неправильный синтаксис ... Отсутствует 'AS': UPDATE products AS p SET p.products_price = (1 + p.products_price) WHERE p.products_id = 8

Malta 14.08.2012 23:12

Другие вопросы по теме