Как сделать триггер, реализующий это условие?

Мне нужен триггер, реализующий этот процесс:

Я должен + добавить этому пользователю число 50 в таблицу money, где в таблице paym оба столбца table1 и table2 не пусты.

Например: у пользователя 'John' оба столбца не пусты и ему добавлено 50 в таблицу money.

Пример в таблице ниже:

стол: paym

 ID        username        table1        Table2  
+-------+-------------+-------------+-----------+
|   1   |  John       |  Value      |    Value  |
+-------+-------------+-------------+-----------+
|   2   |  Alex       |  Null       |    Null   |
+-------+-------------+-------------+-----------+

Таблица: money

 ID      username      total_money      
+-------+-------------+-------------+
|   1   |  John       |     50      | 
+-------+-------------+-------------+
|   2   |  Alex       |     0       |
+-------+-------------+-------------+

Запрос для этого: (не уверен правильно или нет)

UPDATE 
 money
SET 
 money.total_money = money.total_money + 50
INNER JOIN 
 paym
ON
 money.username = paym.username
WHERE
   (paym.Table1 IS NOT NULL OR paym.Table1 <> '')
 AND
   (paym.Table2 IS NOT NULL OR paym.Table2 <> '')

Для этого не нужен триггер. Вам нужно использовать AND вместо OR в ваших условиях, и вам нужно исправить синтаксис вашего ОБНОВЛЕНИЯ. Но соединение перед предложением SET.

Bill Karwin 07.04.2019 17:14

@Bill Karwin Спасибо за ответ! Но он должен + добавить 50 для каждый раз, когда новые значения вставляются в paym для каждая строка, где условие истинно!

user11143440 07.04.2019 17:17
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот триггер для этой цели:

DELIMITER $$
CREATE trigger update_money_after_paym
AFTER INSERT ON paym
FOR EACH ROW
BEGIN
    IF (NEW.table1 IS NOT NULL AND NEW.table2 IS NOT NULL) THEN
        UPDATE money SET total_money = total_money + 50 WHERE username = NEW.username;
    END IF;
END;
$$
DELIMITER;

Код будет выполняться после каждой вставки в таблицу paym. Если во вновь вставленной записи оба столбца table1 и table2 имеют значения, отличные от NULL, то триггер запускает запрос UPDATE, который добавляет 50 к столбцу total_money в таблице money для записи, которая имеет то же username, что и вновь вставленная запись в paym.

Спасибо за ответ! @GMB Но вы проверили свой триггер выше? почему-то возникает синтаксическая ошибка! Когда я пытаюсь бежать!

user11143440 07.04.2019 17:42

@ShukurJank: только что добавил недостающую точку с запятой в конце утверждения UPDATE. Если вы все еще получаете ошибки, пожалуйста, сообщите мне сообщение об ошибке.

GMB 07.04.2019 17:44

Другие вопросы по теме