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

Форум MySQL

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

 

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

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

тема: помогите разобраться с хранимыми процедурами
 
 автор: kaoz   (08.06.2006 в 15:57)   письмо автору
 
 

мне нужно сделать fifo буффер, который будет удалять все устаревшие записи. длина буффера определяется пользователем.

я сделал такую функцию, но некоторых вещей незнаю как реализовать:

CREATE PROCEDURE 'fifo'(l INT)
BEGIN
  SELECT id FROM test WHERE id <> 0;
  IF кол-во ячеек вытащенных селектом >= 45;
     #удалить все записи которые равны или меньше последнего id-45
  END IF;
END


и пользоваться я этой процедурой буду так:
INSERT ........;
CALL fifo(45);

помогите доделать и мож какие мысли конструктивные у кого есть...

   
 
 автор: kaoz   (08.06.2006 в 17:35)   письмо автору
 
   для: kaoz   (08.06.2006 в 15:57)
 

сделал так


CREATE PROCEDURE 'fifo'(l INT)
BEGIN
  DECLARE frows INT DEFAULT 0;
  SELECT FOUND_ROWS() INTO frows FROM test;
  IF frows >= l THEN DELETE FROM test WHERE id;
  END IF;
END


но чето он не хочет работать, пишет: Result consisted of more than one row

   
 
 автор: kaoz   (09.06.2006 в 00:32)   письмо автору
 
   для: kaoz   (08.06.2006 в 17:35)
 

неужели никто незнает?

   
 
 автор: kaoz   (09.06.2006 в 08:54)   письмо автору
 
   для: kaoz   (09.06.2006 в 00:32)
 

...

   
 
 автор: cheops   (09.06.2006 в 11:57)   письмо автору
 
   для: kaoz   (08.06.2006 в 15:57)
 

Процедура должна выглядеть примерно так
CREATE PROCEDURE fifo() 
BEGIN 
  DECLARE number;
  SELECT id INTO number FROM test WHERE id <> 0; 
  IF (number >= 45) THEN
     DELETE FROM test WHERE id <= number - 45; 
  END IF; 
END

   
 
 автор: kaoz   (09.06.2006 в 14:50)   письмо автору
 
   для: cheops   (09.06.2006 в 11:57)
 

мне необходимо определить кол-во выбранных ячеек

я сейчас делаю это так


...
SELECT id FROM test;
SELECT FOUND_ROWS() INTO number;
...


а хотелось бы как-нибудь так:

...
SELECT FOUND_ROWS() INTO number FROM test;
...


но такой код дает ошибку которую я написал выше...

можно ли сделать запрос в одну строку??

   
 
 автор: Trianon   (09.06.2006 в 15:10)   письмо автору
 
   для: kaoz   (09.06.2006 в 14:50)
 

а результат выборки Вам не нужен вообще? Тогда может надо вместо запроса на выборку написать запрос о количестве?

   
 
 автор: kaoz   (09.06.2006 в 15:16)   письмо автору
 
   для: Trianon   (09.06.2006 в 15:10)
 

выборка ненужна... нужно только количество ячеек при выборке

   
 
 автор: Trianon   (09.06.2006 в 15:27)   письмо автору
 
   для: kaoz   (09.06.2006 в 15:16)
 

В этом случае пишут SELECT COUNT(...) и с сервера тянут не данные, а их количество.

   
 
 автор: kaoz   (09.06.2006 в 15:33)   письмо автору
 
   для: Trianon   (09.06.2006 в 15:27)
 

крута, спасибо...

   
 
 автор: kaoz   (09.06.2006 в 15:45)   письмо автору
 
   для: kaoz   (09.06.2006 в 15:33)
 

SELECT COUNT(LogDate)
FROM firewalllog
WHERE id <> 0
GROUP BY LogDate;

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

   
 
 автор: Trianon   (09.06.2006 в 15:47)   письмо автору
 
   для: kaoz   (09.06.2006 в 15:45)
 

SELECT COUNT(DISTINCT LogDate) FROM firewalllog

   
 
 автор: kaoz   (09.06.2006 в 15:49)   письмо автору
 
   для: kaoz   (09.06.2006 в 15:45)
 

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

SELECT MIN(LogDate)
FROM firewalllog
WHERE id <> 0
GROUP BY LogDate;

возвращает все даты

   
 
 автор: Trianon   (09.06.2006 в 15:51)   письмо автору
 
   для: kaoz   (09.06.2006 в 15:49)
 

SELECT MIN(LogDate) FROM firewalllog WHERE .....

Зачем Вы все время пишете Group by?
Вы не знаете, как эта конструкция работает.

   
 
 автор: kaoz   (09.06.2006 в 15:57)   письмо автору
 
   для: Trianon   (09.06.2006 в 15:51)
 

вот спасибо ... :)
еще бы с группировкой разобраться...

   
Rambler's Top100
вверх

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