2014-01-20 4 views
2

У меня есть простой запрос INSERT, который запускается при нажатии на кнопку события, это получает переменные и вставляет их в таблицу order.INSERT и UPDATE в одном запросе MYSQL

Я также хотел бы обновить мою bands таблицу, чтобы уменьшить запас на 1 до тех пор, пока не достигнет 0, то показать нулевой или распроданы, а не идти в минус, например: -6

знать, что группа выбрана я могу использование:

WHERE Band_id = $Band_id"); 

в том же заявлении.

ток ВСТАВИТЬ выглядит следующим образом:

"INSERT INTO orders (band_id,user_id,user_name,band_name,band_venue) VALUES('$Band_id', '$user_id', '$user_name', '$name', '$venue')"; 

Заключение

нужно изменить мой INSERT также UPDATE при проверке, что его текущей выбранной полосы.

ОТВЕТ ПРЕДОСТАВЛЯЕТСЯ ПРОВЕРКА

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

$sql = "INSERT INTO orders (band_id,user_id,user_name,band_name,band_venue) VALUES('$Band_id', '$user_id', '$user_name', '$name', '$venue')"; 

$sql_create ="CREATE TRIGGER tg_ai_orders 
     AFTER INSERT ON orders 
     FOR EACH ROW 
      UPDATE bands 
      SET stock = stock - 1 
      WHERE band_id = NEW.band_id"; 

$sql_deleat = "CREATE TRIGGER tg_ad_orders 
     AFTER DELETE ON orders 
     FOR EACH ROW 
     UPDATE bands 
     SET stock = stock + 1 
     WHERE band_id = OLD.band_id"; 

mysql_query ($sql, $sql_deleat, $sql_create, $linkme) 
    or die ("could not add to database"); 
+0

Вам нужен триггер влияют на другую таблицу в вставке. –

+2

Вы можете использовать два отдельных запроса и обернуть их в транзакции – vidaica

+0

Хорошо, как я могу использовать триггер или обернуть их в транзакции – Beep

ответ

1

Если вы будете идти с триггерной подходом, то вам нужно два триггера (для вставки и удаления)

CREATE TRIGGER tg_ai_orders 
AFTER INSERT ON orders 
FOR EACH ROW 
    UPDATE bands 
    SET stock = stock - 1 
    WHERE band_id = NEW.band_id; 

CREATE TRIGGER tg_ad_orders 
AFTER DELETE ON orders 
FOR EACH ROW 
    UPDATE bands 
    SET stock = stock + 1 
    WHERE band_id = OLD.band_id; 

Вот SQLFiddle демо

+0

+1 для демонстрации, спасибо, peterm, я обновил свой ответ с предоставленным вами ответом вы сообщите мне, если это правильно? так как он не работает совершенно правильно – Beep

+0

Что вы делаете неправильно. Прежде всего, вы должны создать триггеры, прежде чем вы будете выпускать какие-либо инструкции вставки или удаления в таблице заказов. Во-вторых, вы можете выполнять оба оператора 'CREATE TRIGGER ...' только в mysql командной строке клиента, так как вы должны сделать это только один раз. В-третьих, ваш вызов 'mysql_query()' неправильный, поскольку он принимает только два параметра: строку запроса и необязательный идентификатор ссылки. Если вы хотите создать триггеры из php, вам нужно выполнить каждый запрос по одному за раз. – peterm

+0

Хорошо, я немного смущен, но хочу знать, как это сделать, чтобы il попытался его реализовать. – Beep

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