Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с хранимой процедурой
 
 автор: Полный Чайник   (27.02.2006 в 17:18)   письмо автору
 
 

Нужно сделать процедуру которая бы дела ла следующее

select @Price:=Price, @id:=id from price_list where status = 0;
update price_list set Price = (@Price*0.2) where id = @id;


еслиб данная запись в таблице была уникальна для меня это проблем не составило бы, но дело в том что их там примерно 1000 соответсвующих данному условию. А обработать надо как раз все эти записи, т.е. всю тысячу. Как запустить цикл, чтобы они обновились все последовательно?

   
 
 автор: cheops   (27.02.2006 в 22:30)   письмо автору
 
   для: Полный Чайник   (27.02.2006 в 17:18)
 

А зачем вам процедура? Операцию над всеми записями в таблице можно осуществить при помощи лишь одного запроса
UPDATE price_list SET Price = Price*0.2 WHERE status = 0;

или вам нужна именно последняя запись таблицы?

   
 
 автор: Полный Чайник   (28.02.2006 в 12:37)   письмо автору
 
   для: 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)
  }
}
?>


Вот и все вот это надо сделать ввиде процедуры

   
 
 автор: cheops   (28.02.2006 в 13:10)   письмо автору
 
   для: Полный Чайник   (28.02.2006 в 12:37)
 

Хм.. это немного отличается от содержимого первого поста :)))

   
 
 автор: Полный Чайник   (28.02.2006 в 13:25)   письмо автору
 
   для: cheops   (28.02.2006 в 13:10)
 

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

Собственно все задача сводится к тому чтобы сделать из этого кода хранимую процедуру.
Если делать для конкретно указанной строки то все просто и понятно, но ведь дело в том что строк там на самом деле около 10 тысяч.

   
 
 автор: cheops   (28.02.2006 в 22:38)   письмо автору
 
   для: Полный Чайник   (28.02.2006 в 13:25)
 

Тут нужно через цикл WHILE или REPEAT, с привлечением курсоров разбирать запрос - постараюсь завтра отписать подробнее по хранимым процедруам, может даже статейкой розражусь, давно у нас свежих не было...

   
 
 автор: Полный Чайник   (01.03.2006 в 09:09)   письмо автору
 
   для: 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 ;


Она несколько отличается от того, про что я писал ранее, но уже не так значительно.
Но статью по этому вопросц с удовольствием почитаю.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования