SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.02.2013 17:02:36

Fenrir_sz
Участник
Зарегистрирован: 15.02.2013
Сообщений: 1

Вопрос по триггеру

 
Здравствуйте.
Есть таблица

Shows
        show_id    int(11)            AUTO_INCREMENT                                 
    show_banner_id    int(11)                                             
    show_time    timestamp            CURRENT_TIMESTAMP                                     
    show_program_id    int(11)                                         

stat_main
    id                                     int(11)              AUTO_INCREMENT     Primary                            
    sm_program_id                     int(11)                                     
    sm_banner_id                    int(11)                                     
    sm_banner_shows            int(11)                                             
    sm_date                            date

логика такова -
В первую производится полная запись каждого показа баннера (с точностью впроть до секунды),
во вторую должно писаться  количество показов по конкретной программе баннеру и дню.

Собственно написан следующий нерабочий триггер


CREATE TRIGGER `add_count` AFTER INSERT ON `Shows`
FOR EACH ROW BEGIN
INSERT INTO `stat_main` SET
`sm_banner_shows`= 1,
`sm_banner_id`=NEW.`show_banner_id` ,
 `sm_program_id`=NEW.`show_program_id` ,
 `sm_date`=DATE(FROM_UNIXTIME(NEW.`show_time`)),
 `id`=(SELECT IFNULL(MAX(id),0)+1 as id FROM `stat_main`
                    WHERE
                            `sm_banner_id`=NEW.`show_banner_id` AND
                            `sm_program_id`=NEW.`show_program_id` AND
                            `sm_date`=DATE(FROM_UNIXTIME(NEW.`show_time`)))
 ON DUPLICATE KEY UPDATE `sm_banner_shows` = `sm_banner_shows` + 1;
END;


собственно проблема в этой строке
`id`=(SELECT IFNULL(MAX(id),0)+1 as id FROM `stat_main` WHERE `sm_banner_id`=NEW.`show_banner_id` AND `sm_program_id`=NEW.`show_program_id` AND `sm_date`=DATE(FROM_UNIXTIME(NEW.`show_time`)))


каким образом можно получить id строки с конкретным banner_id, program_id и даты? причем если такого нет нужен  максимум +1? как обратиться к результату select? потому что сам запрос на выбор id работает корректно, не работает связка id=select()...

или каким другим способом это реализовать?

Заранее спасибо.

Неактивен

 

#2 16.02.2013 00:11:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вопрос по триггеру

Можно использовать пользовательские переменные.
@a = select ...;
insert ... @a ...;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson