2015-04-29 4 views
0

У меня возникли трудности с синтаксисом триггера в моей базе данных magento.MySQL Триггер с вложенными операциями select

Я хочу обновить значение в таблице клиентов при создании нового адреса.

В таблице customer_address_entity_varchar выглядит следующим образом:

value_id | entity_type_id | attribute_id | entity_id | value 
48  | 2    | 28   | 3   | Lancashire 

Когда я делаю курок без вложенной отборных заявления он работает, так что:

IF (new.attribute_id=28) THEN 
UPDATE customer_entity SET customer_entity.group_id = 4 
WHERE customer_entity.entity_id = 1 
END IF; 

Я пытаюсь использовать new.entity_id и новый . значение для выбора значений из других таблиц для замены 4 и 1:

DROP TRIGGER IF EXISTS `groupid_update`; 
CREATE DEFINER=`rock_store`@`localhost` TRIGGER `groupid_update` 
AFTER INSERT ON `customer_address_entity_varchar` 

FOR EACH ROW 

IF (new.attribute_id = 28) THEN 

UPDATE customer_entity 
SET customer_entity.group_id = ( 
    SELECT directory_country_region_name.customer_group_id 
    FROM directory_country_region_name 
    WHERE directory_country_region_name.name = "'" + new.value + "'") 
WHERE customer_entity.entity_id = ( 
    SELECT customer_address_entity.parent_id 
    FROM customer_address_entity 
    WHERE customer_address_entity.entity_id = new.entity_id); 
END IF; 

Создание триггера в MySQL успешно, но когда я пытаюсь добавить новый адрес в Magento, я получаю сообщение об ошибке, которое ничего мне не говорит.

Благодарим за помощь. Liam

ответ

0

Мне удалось решить это, разбив то, что я пытался сделать.

IF (new.attribute_id = 28) THEN 

SET @add_entity_id = new.entity_id; 
SET @county = new.value; 


SET @group_id = (SELECT directory_country_region_name.customer_group_id 
FROM directory_country_region_name 
WHERE directory_country_region_name.name = @county); 

SET @customer_id = ( 
SELECT customer_address_entity.parent_id 
FROM customer_address_entity 
WHERE customer_address_entity.entity_id = new.entity_id); 

UPDATE customer_entity SET customer_entity.group_id = @group_id WHERE customer_entity.entity_id = @customer_id; 

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