[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Триггеры Mysql, переменные в имени поля
DedMorozzz
Собственно сабж, кто сталкивался. Каким образом использовать переменные в имени обновляемого поля, пример:

delimiter |

CREATE TRIGGER update_expression_counter BEFORE INSERT ON remake_town_expressions
FOR EACH ROW BEGIN

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 @field := 'comment_cnt';

SELECT CASE @type
WHEN
'comment' THEN 'comment_cnt'
WHEN 'photo' THEN 'photo_cnt'
WHEN 'video' THEN 'video_cnt'
WHEN 'tag' THEN 'tag_cnt'
WHEN 'checkin' THEN 'checkin_cnt'
END
INTO @field;

INSERT INTO `remake_town_counter` (`user_id`,`user_profile_id`,`country_iso`,`city_id`,`place_id`, @field)
VALUES (@user_id,@user_profile_id,@country_iso,@city_id,@place_id,1) ON DUPLICATE KEY UPDATE @field=@field+1,`rank`=`rank`+1;

END;
|


delimiter ;


В данном синтаксисе не проходит @field в этом месте - `place_id`, @field) , необходимо в кавычках использовать, если поставить кавычки, то в результирующем запросе будет имя переменной, а не её значение.

Всё бы решалось, крайне просто, если бы можно сделать процедуру(или прямо в теле триггера), в которой хранилось бы нечто по типу такого:


SET @query := CONCAT('INSERT INTO `remake_town_counter` (`user_id`,`user_profile_id`,`country_iso`,`city_id`,`place_id`,`', current_field,'`)
VALUES ('
,user_id,',',user_profile_id,',"',country_iso,'",',city_id,',',place_id,',1) ON DUPLICATE KEY UPDATE `',current_field,'`=`',current_field,'`+1,`rank`=`rank`+1');

PREPARE stmt1 FROM @query;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;


Но тут такой момент...в триггерах нельзя использовать Dynamic SQL, и не важно, что он будет в вызываемой процедуре.
Т.о. как всё же использовать полученное поле в качестве имени?

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

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