2013-04-10 3 views
0

У меня возникла проблема с появлением правильной инструкции для обновления поля в той же таблице, что и триггер insert. Это для таблицы MySql.Trigger to Update value в таблице mysql

В принципе мне нужно, чтобы вставленное значение проверялось на базовый цвет в поле, поэтому, если поле: «Cobalt Blue», я хочу, чтобы цвет был вставлен в поле «Голубой».

Я уже придумал следующее заявление, чтобы получить правильный цвет, чтобы быть правильно:

SELECT CASE 
    WHEN 'value' LIKE '%blue%' THEN 'Blue' 
    WHEN 'value' LIKE '%red%' THEN 'Red' 
    ELSE 'Other color' 
END AS normalized_color 
FROM 'products_extra_fields' 
WHERE 'products_extra_fields'.'value' = 'color' 

Теперь рядом мне это нужно, чтобы быть в триггере на столе вставки WHERE «products_extra_fields» «значение». = 'color'.

Я просто не могу понять, как построить этот триггер, чтобы содержать UPDATE с оператором SELECT CASE.

+0

Как ваше значение может быть '= 'color'' и' LIKE'% red% ''одновременно? Этот запрос всегда будет возвращать «Другой цвет». – Vatev

+0

Значение «цвет» - это только имя поля в таблице «products_extra_fields». Это делается потому, что таблица содержит запись для каждого дополнительного поля, добавленного в таблицу продуктов. Это может сбивать с толку, но запрос работает эффективно, я получаю хороший список всех исправленных цветов, просто проверил его снова. – Hugo

+0

Um .. ok .. какое поле имеет имя поля и которое имеет значение? – Vatev

ответ

1

Вам не нужно обновлять таблицу после вставки, вы можете просто изменить значение, которое нужно вставить в триггер.

CREATE TRIGGER `before_insert_products_extra_fields` 
BEFORE INSERT ON `products_extra_fields` FOR EACH ROW 
BEGIN 
    IF(NEW.name = 'color') THEN 
     SET NEW.value = CASE 
      WHEN NEW.value LIKE '%red%' THEN 'red' 
      WHEN NEW.value LIKE '%blue%' THEN 'blue' 
      ... 
      ELSE 'other' 
     END; 
    END IF; 
END 

Кроме того, вы, вероятно, следует создать подобный BEFORE UPDATE триггер на этой таблице.

+0

Это выглядит именно так, что я ищу. Однако при импорте этого утверждения я получаю сообщение об ошибке. phpMyAdmin говорит, что он находится в строке: END; (сразу после ELSE). Я думаю, что это связано с отсутствием BEGIN? – Hugo

+0

В конечном итоге я исправил это, создав триггер в phpMyAdmin вручную. Это сработало, поэтому само утверждение было правильным! Благодарю. – Hugo