2014-09-16 3 views
0

Я стараюсь, чтобы действия были следующими: Когда пользователь нажимает на одно «событие», сервер вставляет новую запись в базу данных с данными eventId и userId в таблице A. триггер затем вступает в игру и затем активировать после этого вставить заявление, посмотрите на колонку новых строк eventId, а затем искать другую таблицу, B, чтобы соответствовать этому eventId и приращение на колонке numberClicks в этой записи для таблицы B.Динамический триггер для поиска и обновления таблицы записей

Я искал источники, но никто не давал понять, как создать триггер, который будет читаться в столбце из строки строки вставки, искать другую таблицу для этого идентификатора и обновлять его.

Есть ли простой способ разрешить этот триггер?

ответ

1

Это будет failry просто что-то, как

delimiter // 
    create trigger number_clicks after insert on event 
    for each row 
    begin 
    declare click_count int default 0 ; 
    select count(*) 
    into click_count 
    from clicks 
    where eventId = new.eventId ; 

    if click_count > 0 then 
     update clicks set numberClicks = numberClicks + 1 where eventId = new.eventId ; 
    else 
     insert into clicks (eventId , numberClicks) values (new.eventId,1); 
    end if; 
    end ;// 
delimiter ; 

Так идея первая проверки в таблице клик, если есть запись для последнего вставленного события, и если его там, то увеличивает счетчик на единицу еще добавить новая запись в таблице

Вот некоторые тесты

mysql> create table event (eventId int,userId int); 
Query OK, 0 rows affected (0.06 sec) 

mysql> create table clicks(eventId int , numberClicks int); 
Query OK, 0 rows affected (0.08 sec) 

mysql> insert into event values (1,1); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from clicks ; 
+---------+--------------+ 
| eventId | numberClicks | 
+---------+--------------+ 
|  1 |   1 | 
+---------+--------------+ 
1 row in set (0.00 sec) 

mysql> insert into event values (1,2); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from clicks ; 
+---------+--------------+ 
| eventId | numberClicks | 
+---------+--------------+ 
|  1 |   2 | 
+---------+--------------+ 
1 row in set (0.00 sec) 

mysql> insert into event values (2,4); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from clicks ; 
+---------+--------------+ 
| eventId | numberClicks | 
+---------+--------------+ 
|  1 |   2 | 
|  2 |   1 | 
+---------+--------------+ 
2 rows in set (0.00 sec) 

mysql> insert into event values (2,5); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from clicks ; 
+---------+--------------+ 
| eventId | numberClicks | 
+---------+--------------+ 
|  1 |   2 | 
|  2 |   2 | 
+---------+--------------+ 
2 rows in set (0.00 sec) 
+0

Как вы это проверить? Есть ли встроенная функция для тестирования? – Sauron

+0

Нет. Я тестировал это на терминале mysql вручную. –

Смежные вопросы