|
|
|
| Нужно сделать процедуру которая бы дела ла следующее
select @Price:=Price, @id:=id from price_list where status = 0;
update price_list set Price = (@Price*0.2) where id = @id;
|
еслиб данная запись в таблице была уникальна для меня это проблем не составило бы, но дело в том что их там примерно 1000 соответсвующих данному условию. А обработать надо как раз все эти записи, т.е. всю тысячу. Как запустить цикл, чтобы они обновились все последовательно? | |
|
|
|
|
|
|
|
для: Полный Чайник
(27.02.2006 в 17:18)
| | А зачем вам процедура? Операцию над всеми записями в таблице можно осуществить при помощи лишь одного запроса
UPDATE price_list SET Price = Price*0.2 WHERE status = 0;
|
или вам нужна именно последняя запись таблицы? | |
|
|
|
|
|
|
|
для: cheops
(27.02.2006 в 22:30)
| | нет на самом деле есть такая вещь (PHP + MySQL):
<?
$cor1 = mysql_query("select * from list where status = 0;");
while ($cor = mysql_fetch_array($cor1))
{
$Lot = $cor1['id'];
$count1 = mysql_query("select count(*) from bids where Lot = $Lot;");
$count1 = mysql_result($count1,0);
if ($count1 == 0)
{
$Player = $cor1['PlayerID'];
$PriceA = mysql_query("select * from players where id=$Player;");
$PriceA = mysql_fetch_array($PriceA);
$Price = $PriceA['price'] * 0.5;
insert into bids values ('', $Lot, 'Default', $Price)
}
}
?>
|
Вот и все вот это надо сделать ввиде процедуры | |
|
|
|
|
|
|
|
для: Полный Чайник
(28.02.2006 в 12:37)
| | Хм.. это немного отличается от содержимого первого поста :))) | |
|
|
|
|
|
|
|
для: cheops
(28.02.2006 в 13:10)
| | Не немного, а сильно, но первый пост я побольшому счету делал для того чтобы узнать можно ли вообще сделать цикл в хранимой процедуре.
Собственно все задача сводится к тому чтобы сделать из этого кода хранимую процедуру.
Если делать для конкретно указанной строки то все просто и понятно, но ведь дело в том что строк там на самом деле около 10 тысяч. | |
|
|
|
|
|
|
|
для: Полный Чайник
(28.02.2006 в 13:25)
| | Тут нужно через цикл WHILE или REPEAT, с привлечением курсоров разбирать запрос - постараюсь завтра отписать подробнее по хранимым процедруам, может даже статейкой розражусь, давно у нас свежих не было... | |
|
|
|
|
|
|
|
для: cheops
(28.02.2006 в 22:38)
| | В общем я свою проблему решил итоговая процедура выглядит так:
DELIMITER $$
DROP PROCEDURE IF EXISTS 'leaque_bid' $$
CREATE PROCEDURE leaque_bid()
BEGIN
DECLARE lt INT default 0;
DECLARE pl INT default 0;
DECLARE cur1 CURSOR FOR select Lot,PlayerID from tr_list where TrStatus = 0 and 4*24*3600+LotTime<unix_timestamp();
SET @done = (select max(Lot) from tr_list where TrStatus = 0 and 4*24*3600+LotTime<unix_timestamp()) - 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO lt, pl;
if (select count(*) from tr_bids where Lot = lt) = 0 then
set @price = (select Price from ut_players where PlayerID = pl)*0.5;
insert into tr_bids values (lt, 1, @price, unix_timestamp(), '0.0.0.0');
end if;
Until lt > @done END REPEAT;
CLOSE cur1;
END $$
DELIMITER ;
|
Она несколько отличается от того, про что я писал ранее, но уже не так значительно.
Но статью по этому вопросц с удовольствием почитаю. | |
|
|
|