ICQ - форум. Всё про ICQ.  

Вернуться   ICQ - форум. Всё про ICQ. > Мастерская > Программирование > Web-программирование

Web-программирование PHP, Perl, JavaScript, HTML, CGI, ASP, MySQL, etc.

 
 
Опции темы Оценить тему
Старый 29.05.2012, 12:30   #1
Участник
 
Аватар для ImaginE
 
Регистрация: 22.02.2007
Сообщений: 126

ICQ: 242342

Репутация: 231
По умолчанию MySQL

Привет!
Помогите пожалуйста.

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.
ImaginE вне форума  
Старый 30.05.2012, 15:29   #2
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

Ты офигенно объяснил, ничего не понять.
Что нужно-то?

Твой код:
Ты получаешь amount из таблицы.
Дальше обновляешь значение amount у ID=1 на -70 от текущего.
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR.
.fry вне форума  
Старый 30.05.2012, 17:02   #3
Участник
 
Аватар для ImaginE
 
Регистрация: 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. Причина: Добавлено сообщение
ImaginE вне форума  
Старый 30.05.2012, 18:03   #4
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

Как сделать без процедур не пришло в голову. Сделал 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 вне форума  
Плюсанул .fry :
Старый 31.05.2012, 01:25   #5
Участник
 
Аватар для ImaginE
 
Регистрация: 22.02.2007
Сообщений: 126

ICQ: 242342

Репутация: 231
По умолчанию

Спасибо! С процедурой работает, только узнать как бы обойтись без процедур.
ImaginE вне форума  
Старый 31.05.2012, 13:02   #6
Участник
 
Регистрация: 27.09.2006
Сообщений: 1,045

ICQ: 272768

Репутация: 2856
Отправить сообщение для .fry с помощью Skype™ Bimoid
По умолчанию

ImaginE, чем тебя процедура не устраивает? :)
__________________
Хочешь знать как работает ICQ? Читай документацию по протоколу в OSCAR.

Последний раз редактировалось .fry; 31.05.2012 в 14:10.
.fry вне форума  
Старый 31.05.2012, 21:51   #7
Участник
 
Аватар для ImaginE
 
Регистрация: 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);
ImaginE вне форума  
 

Опции темы
Оценка этой теме
Оценка этой теме:

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Выкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 16:26.


Перевод: zCarot
Форум Асечников © Asechka.RU

Новости Сочи