2015-12-03 3 views
0

Я пытаюсь создать довольно сложный триггер, и я не уверен, что это можно сделать на phpMyAdmin.Создание триггера, который извлекает информацию из другой таблицы в phpMyAdmin

Прямо сейчас у меня есть этот запрос, который создает таблицу со всей необходимой мне информацией.

CREATE TABLE SeniorDB_Shipping 

SELECT 

    SeniorDB_Invoice.ID_Order, 
    SeniorDB_Customer.MCT_Code, 
    SeniorDB_Customer.Customer_Name, 
    SeniorDB_Customer.Customer_Address, 
    SeniorDB_Customer.Customer_City, 
    SeniorDB_Customer.Customer_State, 
    SeniorDB_Invoice.Shipping_Company 

FROM SeniorDB_Customer 

Join SeniorDB_Invoice ON SeniorDB_Customer.MCT_Code = SeniorDB_Invoice.MCT_Code 

Inserted into this table

Как вы можете видеть на картинке, когда я выполнить запрос, он тянет информацию из приведенных выше данных таблиц. Я пытаюсь (и не удается) создать триггер, который будет делать то же самое, не делая create совершенно новый стол каждый раз. Все остальные сообщения, которые я видел, аналогичны для таблицы creating вместо таблицы inserting.

Что такое триггер, когда я ввожу ID_Order, остальная информация будет вытащить из базы данных.

Это триггер я до сих пор:

delimiter ~ 

     create trigger SeniorDB_Shipping before insert on SeniorDB_Shipping 
     for each row begin 
      set new.SeniorDB_Shipping.MCT_Code =   new.SeniorDB_Customer.MCT_Code,; 
      set new.SeniorDB_Shipping.Customer_Name =  new.SeniorDB_Customer.Customer_Name,; 
      set new.SeniorDB_Shipping.Customer_Address = new.SeniorDB_Customer.Customer_Address,; 
      set new.SeniorDB_Shipping.Customer_City =  new.SeniorDB_Customer.Customer_City,; 
      set new.SeniorDB_Shipping.Customer_State =  new.SeniorDB_Customer.Customer_State,; 
      set new.SeniorDB_Shipping.Shipping_Company = new.SeniorDB_Customer.Shipping_Company,; 
     end~ 

    delimiter ; 

Я чувствую, что я прямо там. Я просто не могу связать его, когда я вхожу в ID_Order.

Это страница, если вы хотели бы видеть базы данных: http://polonium.forest.usf.edu/~sngamwon/SeniorProject/SeniorDB_Order.php

+0

Чтобы уточнить, первый запрос не создает таблицу, и вы хотите новую таблицу каждый раз? Если да, есть ли причины для новой таблицы? – thelastshadow

+0

Приносим извинения, я изменил его. Я попробовал это раньше как «INSERT», но я получил много ошибок. Он работает как 'CREATE TABLE', но не как' INSERT'. Я предполагаю, что мой синтаксис или понимание немного выключено. – user5619474

+0

Я могу дать вам правильный запрос для запуска вставки в ту же таблицу, которую вы предварительно создали. Я не думаю, что вам нужен спусковой крючок. Это то, что вам нужно? – thelastshadow

ответ

0

Ok, так что вам нужно запустить этот раз:

/* Create the table with a primary key */ 
create table `SeniorDB_Shipping` (
    `id` INT unsigned AUTO_INCREMENT NOT NULL, 
    primary key(id), 
    `ID_Order` int NOT NULL, 
    `MCT_Code` int NOT NULL, 
    `Customer_Name` varchar(255) NOT NULL, 
    `Customer_Address` varchar(255) NOT NULL, 
    `Customer_City` varchar(255) NOT NULL, 
    `Customer_State` varchar(255) NOT NULL, 
    `Shipping_Company` varchar(255) NOT NULL 
) ENGINE=MyISAM CHARACTER SET=utf8 COLLATE utf8_general_ci; 

Затем вы можете запустить

/* Insert statement */ 
INSERT INTO `SeniorDB_Shipping` (
    `ID_Order`, 
    `MCT_Code`, 
    `Customer_Name`, 
    `Customer_Address`, 
    `Customer_City`, 
    `Customer_State`, 
    `Shipping_Company` 
) SELECT 
    invoice.ID_Order, 
    customer.MCT_Code, 
    customer.Customer_Name, 
    customer.Customer_Address, 
    customer.Customer_City, 
    customer.Customer_State, 
    invoice.Shipping_Company 
FROM 
    SeniorDB_Customer as customer 
    Join SeniorDB_Invoice as invoice 
     ON customer.MCT_Code = invoice.MCT_Code; 

Я запустил это в своем собственном PHPMyAdmin, так что он работает. Но у меня, очевидно, нет вашей схемы. Известные проблемы:

  • Это заполнит SeniorDB_Shipping с ALL данных из ваших двух таблиц каждый раз. Измените запрос по мере необходимости, чтобы выбрать только последние данные, если это не то, что вы хотите. Если ID_Order является первичным ключом, вы можете проверить, что он еще не существует.
+0

Я не уверен, как это проверить. Я просто должен ввести номер ID_Order, и он оставит остальную информацию? – user5619474

+0

Он должен создать новую таблицу 'SeniorDB_Shipping', которую вы можете просмотреть в PHPMyAdmin. После запуска второго запроса он добавит строку в эту таблицу для каждой строки в «SeniorDB_Customer». Вы можете просмотреть 'SeniorDB_Shipping' и убедиться, что он имеет то, что вы хотите.Если позже вы хотите загрузить одну новую строку в эту таблицу из двух других таблиц, запустите один и тот же оператор (второй запрос), но добавьте 'where invoice.ID_Order = N' в конце, где N - идентификатор счета, который вы хотите добавить , – thelastshadow

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