[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Несколько апдейтов одной таблицы в триггере
DedMorozzz
Имеется триггер, который обновляет стату юзера по плейсу, городу и миру.
Тригер вызывается при добавлении любого действия, т.е. комментарий, фотка, видео и т.д.
Вот он

SET @type := NEW.`type`;
SET @user_id := NEW.user_id;
SET @user_profile_id := NEW.user_profile_id;
SET @country_iso := NEW.country_iso;
SET @place_id := NEW.`place_id`;
SET @city_id := NEW.`city_id`;

SET @comment_cnt := CASE WHEN @type = 'comment' THEN 1 ELSE 0 END;
SET @photo_cnt := CASE WHEN @type = 'photo' THEN 1 ELSE 0 END;
SET @video_cnt := CASE WHEN @type = 'video' THEN 1 ELSE 0 END;
SET @tag_cnt := CASE WHEN @type = 'tag' THEN 1 ELSE 0 END;
SET @checkin_cnt := CASE WHEN @type = 'checkin' THEN 1 ELSE 0 END;

-- update user count actions in the place
INSERT INTO `remake_town_counter` (`user_id`,`user_profile_id`,`country_iso`,`city_id`,`place_id`, `comment_cnt`,`photo_cnt`,`video_cnt`,`checkin_cnt`,`tag_cnt`,`rank`)
VALUES (@user_id,@user_profile_id,@country_iso,@city_id,@place_id,@comment_cnt,@photo_cnt,@video_cnt,@checki n_cnt,@tag_cnt,1)
ON DUPLICATE KEY UPDATE
`comment_cnt`=`comment_cnt`+@comment_cnt,`photo_cnt`=`photo_cnt`+@photo_cnt,`video_cnt`=`video_cnt`+ @video_cnt,`checkin_cnt`=`checkin_cnt`+@checkin_cnt,`tag_cnt`=`tag_cnt`+@tag_cnt,`rank`=`rank`+1;

-- update user count actions in the city
INSERT INTO `remake_town_counter` (`user_id`,`user_profile_id`,`country_iso`,`city_id`,`place_id`, `comment_cnt`,`photo_cnt`,`video_cnt`,`checkin_cnt`,`tag_cnt`,`rank`)
VALUES (@user_id,@user_profile_id,@country_iso,@city_id,0,@comment_cnt,@photo_cnt,@video_cnt,@checkin_cnt,@tag_cnt,1)
ON DUPLICATE KEY UPDATE
`comment_cnt`=`comment_cnt`+@comment_cnt,`photo_cnt`=`photo_cnt`+@photo_cnt,`video_cnt`=`video_cnt`+ @video_cnt,`checkin_cnt`=`checkin_cnt`+@checkin_cnt,`tag_cnt`=`tag_cnt`+@tag_cnt,`rank`=`rank`+1;

-- update user count actions in the world
INSERT INTO `remake_town_counter` (`user_id`,`user_profile_id`,`country_iso`,`city_id`,`place_id`, `comment_cnt`,`photo_cnt`,`video_cnt`,`checkin_cnt`,`tag_cnt`,`rank`)
VALUES (@user_id,@user_profile_id,0,0,0,@comment_cnt,@photo_cnt,@video_cnt,@checkin_cnt,@tag_cnt,1)
ON DUPLICATE KEY UPDATE
`comment_cnt`=`comment_cnt`+@comment_cnt,`photo_cnt`=`photo_cnt`+@photo_cnt,`video_cnt`=`video_cnt`+ @video_cnt,`checkin_cnt`=`checkin_cnt`+@checkin_cnt,`tag_cnt`=`tag_cnt`+@tag_cnt,`rank`=`rank`+1;



Получается если плейс 0, то эта запись для города. Если не указана страна(равна 0) - то это для всего мира

И тут такой момент... при этом тригере отрабатывает обновление статы плейса и мира, города - нет.
Просто оставить город - обновляет.
Город+мир - обновляет(т.е. убираю плейс). Мир+плейс - всё обновляет. Город+плейс - только плейс.
Все 3 - обновляет всё, кроме города
Меняю местами блок апдейта плейса с блоком апдейта города - обновляет строку города, плейс не обновляет


Все апдейты - для 1й таблицы.

Кто сталкивался с таковой ситуацией и как решали?

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.