|
|
|
| мне нужно сделать 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 в 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
(08.06.2006 в 17:35)
| | неужели никто незнает? | |
|
|
|
|
|
|
|
для: kaoz
(09.06.2006 в 00:32)
| | ... | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: cheops
(09.06.2006 в 11:57)
| | мне необходимо определить кол-во выбранных ячеек
я сейчас делаю это так
...
SELECT id FROM test;
SELECT FOUND_ROWS() INTO number;
...
|
а хотелось бы как-нибудь так:
...
SELECT FOUND_ROWS() INTO number FROM test;
...
|
но такой код дает ошибку которую я написал выше...
можно ли сделать запрос в одну строку?? | |
|
|
|
|
|
|
|
для: kaoz
(09.06.2006 в 14:50)
| | а результат выборки Вам не нужен вообще? Тогда может надо вместо запроса на выборку написать запрос о количестве? | |
|
|
|
|
|
|
|
для: Trianon
(09.06.2006 в 15:10)
| | выборка ненужна... нужно только количество ячеек при выборке | |
|
|
|
|
|
|
|
для: kaoz
(09.06.2006 в 15:16)
| | В этом случае пишут SELECT COUNT(...) и с сервера тянут не данные, а их количество. | |
|
|
|
|
|
|
|
для: Trianon
(09.06.2006 в 15:27)
| | крута, спасибо... | |
|
|
|
|
|
|
|
для: kaoz
(09.06.2006 в 15:33)
| | SELECT COUNT(LogDate)
FROM firewalllog
WHERE id <> 0
GROUP BY LogDate;
делаю такой запрос, но он мне возвращает сколько всего записей в таблице, а мне нужно только сколько разных дат | |
|
|
|
|
|
|
|
для: kaoz
(09.06.2006 в 15:45)
| | SELECT COUNT(DISTINCT LogDate) FROM firewalllog | |
|
|
|
|
|
|
|
для: kaoz
(09.06.2006 в 15:45)
| | и еще мне нужно определить какая минимальная дата из выбранных
SELECT MIN(LogDate)
FROM firewalllog
WHERE id <> 0
GROUP BY LogDate;
возвращает все даты | |
|
|
|
|
|
|
|
для: kaoz
(09.06.2006 в 15:49)
| | SELECT MIN(LogDate) FROM firewalllog WHERE .....
Зачем Вы все время пишете Group by?
Вы не знаете, как эта конструкция работает. | |
|
|
|
|
|
|
|
для: Trianon
(09.06.2006 в 15:51)
| | вот спасибо ... :)
еще бы с группировкой разобраться... | |
|
|
|