Пуля — дура. Пых — молодец.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 25 Май, 2012, 06:28:31

Страниц: [1]
Печать
Автор Тема: Помогите с составлением Триггера Mysql  (Прочитано 198 раз)
0 Пользователей и 1 Гость смотрят эту тему.
onzone    ↓ 
14 Ноябрь, 2011, 10:20:03
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 72
Сила слова: 0

Здравствуйте, возникла такая проблема. У меня есть рабочий триггер (который позволяет добавлять в базе записи не более 20 раз по определённому ID) на MS SQL
SQL

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[insertTrigger] ON [dbo][coordinates] FOR INSERT
AS
BEGIN
 declare @count numeric,
 @id numeric,
 @min numeric
 SELECT @id = id FROM inserted
 SELECT * FROM coordinates WHERE id = @id
 SELECT @count=@@rowcount
 IF @count>=20
 begin
 SELECT @min=min("time") FROM coordinates WHERE id = @id
 DELETE FROM coordinates WHERE id=@id AND "time"=@min
 end
END
 
Возникли проблемы при переводе данного триггера в Mysql. Ребята, если, кто знает помогите пожалуйста с составлением данного триггера. Заранее благодарен!
Записан
phpdude    ↓ 
14 Ноябрь, 2011, 11:32:48 , спустя 1 час 12 минут 45 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20790
Сила слова: 1.66

нахуй нам надо за тебя работу делать? что ТЫ уже сделал в этой задаче сам?
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Nyaah    ↓ 
14 Ноябрь, 2011, 11:40:31 , спустя 7 минут 43 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 34
Сообщений: 522
Сила слова: 6.51

SQL

SET DELIMITER $$
ADD TRIGGER `dbo`.`DBO_COORDINATES_AFTER_INSERT_TRIGGER` AFTER INSERT ON `dbo`.`coordinates`
FOR EACH ROW
BEGIN
    SET @count=0;
    SET @min=0;
    SELECT COUNT(*) INTO @count FROM `coordinates` WHERE `id`=NEW.`id`;
    IF @count>=20 BEGIN
        SELECT MIN(`time`) INTO @min FROM `coordinates` WHERE `id`=NEW.`id`;
        DELETE FROM `coordinates` WHERE `id`=NEW.`id` AND `time`=@min;
    END;
END $$
SET DELIMITER;
 
Не проверял, возможно будет работать, точно не помню, в if begin end разделитель нужно в конец добавлять или нет )
А удалял я бы не так, а как-нить типа DELETE FROM `coordinates` WHERE `id`=NEW.`id` ORDER BY `time` ASC LIMIT @count-20; тогда не надо вычислять минимум и если уже надобавляли данных больше 20 строк, то до 20 и обрежет.
Записан

Work, buy, consume, die
onzone    ↓ 
14 Ноябрь, 2011, 11:58:21 , спустя 17 минут 50 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 72
Сила слова: 0

phpdude, Написал триггер на SQL=)  И день просидел перебирая варианты на Mysql,  Nyaah, ага спасибо попробую
Записан
kostyl    ↓ 
15 Ноябрь, 2011, 10:42:31 , спустя 22 часа 44 минуты 10 секунд
НЕ ХУЕТА! ХУЕТА!

занедельный антипаттерн
Группа: Джедаи

Карма: 60
Сообщений: 3522
Сила слова: 1.7

хаха... интересно как именно перебирать варианты )))
Записан

качество жизни обратно пропорционально количеству лени
onzone    ↓ 
16 Ноябрь, 2011, 02:54:36 , спустя 16 часов 12 минут 5 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 72
Сила слова: 0

kostyl,Ну как пробовали переписать триггер постепенно добавляя функционал, но в итоге чего-то не хочет он работать вот конечный результат такой получили
SQL

 
delimiter |
ADD TRIGGER `dbo`.`DBO_COORDINATES_AFTER_INSERT_TRIGGER` AFTER INSERT ON `dbo`.`coordinates`
FOR EACH ROW
BEGIN
    SET @count=0;
    SET @min=0;
    SELECT COUNT(*) INTO @count FROM `coordinates` WHERE `id`=NEW.`id`;
    IF @count>=20 BEGIN
        SELECT MIN(`time`) INTO @min FROM `coordinates` WHERE `id`=NEW.`id`;
        DELETE FROM `coordinates` WHERE `id`=NEW.`id` AND `time`=@min;
    END;
END
delimiter ;
 
Триггер создаёться на mysql , но почему-то не выполняеться, а на ms sql всё работает прекрасно =(
Записан
phpdude    ↓ 
16 Ноябрь, 2011, 02:57:09 , спустя 2 минуты 33 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20790
Сила слова: 1.66

Триггер создаёться на mysql , но почему-то не выполняеться
может хотя бы потмоу что в mysql нет понятия dbo?
 
а вы в этом вообще без понятия :-)
 
наймите уже кого нить и не клянчите :)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Nyaah    ↓ 
16 Ноябрь, 2011, 05:39:17 , спустя 2 часа 42 минуты 8 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 34
Сообщений: 522
Сила слова: 6.51

SQL
delimiter |
ADD TRIGGER `DBO_COORDINATES_AFTER_INSERT_TRIGGER` AFTER INSERT ON `coordinates`
FOR EACH ROW
BEGIN
    DELETE FROM `coordinates` WHERE `id`=NEW.`id` ORDER BY `time` ASC LIMIT 19, 100500;
END
delimiter ;
Спустя 1 минуту 14 секунд добавил
кстати, если в таблица залочится целиком, а не только создаваемая строка, то триггер не сработает
Записан

Work, buy, consume, die
Страниц: [1]
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd