![]() |
|
Web-программирование PHP, Perl, JavaScript, HTML, CGI, ASP, MySQL, etc. |
|
Опции темы | Оценить тему |
![]() |
#1 |
Участник
Регистрация: 22.02.2007
Сообщений: 126
ICQ: 242342 Репутация: 231
|
![]()
Привет!
Помогите пожалуйста. SELECT amount FROM account WHERE id=1; Если amount > 70 продолжить , если меньше - остановить. UPDATE account SET amount=amount-70 WHERE id=1; UPDATE account SET amount=amount+70 WHERE id=2; Как правильно написать, чтобы он делал так? Спасибо. Последний раз редактировалось ImaginE; 29.05.2012 в 14:35. |
![]() |
![]() |
#2 |
Участник
|
![]()
Ты офигенно объяснил, ничего не понять.
Что нужно-то? Твой код: Ты получаешь amount из таблицы. Дальше обновляешь значение amount у ID=1 на -70 от текущего.
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR. |
![]() |
![]() |
#3 |
Участник
Регистрация: 22.02.2007
Сообщений: 126
ICQ: 242342 Репутация: 231
|
![]()
Мне надо, чтобы после получения amount'a из таблицы, он проверил, если этот amount больше 70, тогда обновляю значение amount у id=1 и id=2, А если меньше 70, тогда я ничего не делаю вообще.
Добавлено через 2 минуты Что-то типо этого, только этот не работает. SELECT amount FROM account WHERE id=1; IF (amount >= 70) THEN SET amount = amount-70 WHERE id=1; SET amount = amount+70 WHERE id=2; END IF; Последний раз редактировалось ImaginE; 30.05.2012 в 17:05. Причина: Добавлено сообщение |
![]() |
![]() |
#4 |
Участник
|
![]()
Как сделать без процедур не пришло в голову. Сделал SQL-процедуру.
Код:
DROP PROCEDURE IF EXISTS ChangeAmountAtAccountsTable; DELIMITER $$ CREATE PROCEDURE ChangeAmountAtAccountsTable() BEGIN DECLARE `CurrentAmount` INT; SELECT `amount` INTO `CurrentAmount` FROM `account` WHERE `id` = 1; IF CurrentAmount >= 70 THEN UPDATE `account` SET `amount` = `amount` - 70 WHERE `id` = 1; UPDATE `account` SET `amount` = `amount` + 70 WHERE `id` = 2; END IF; END; Код:
CALL ChangeAmountAtAccountsTable();
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR. Последний раз редактировалось .fry; 30.05.2012 в 18:21. |
![]() |
Плюсанул .fry : |
![]() |
#6 |
Участник
|
![]()
ImaginE, чем тебя процедура не устраивает? :)
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR. Последний раз редактировалось .fry; 31.05.2012 в 14:10. |
![]() |
![]() |
#7 |
Участник
Регистрация: 22.02.2007
Сообщений: 126
ICQ: 242342 Репутация: 231
|
![]()
.fry, в описании проэкта, надо было без процедуры.
Решил таким путём SELECT @var:=amount FROM account WHERE id = 1; UPDATE account SET amount = amount - 70 WHERE (id = 1) AND IF(@var < 70, false, true); UPDATE account SET amount = amount + 70 WHERE (id = 2) AND IF(@var < 70, false, true); |
![]() |