2015-12-03 77 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一张全新的表格。我所看到的所有其他帖子都是类似的,而不是inserting表格creating

触发器的作用是,当我输入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

好了,所以你需要运行一次此:

/* 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是要添加的发票ID 。 – thelastshadow

相关问题