Php MySql使用现有表中的列和另一个表中的不同查找创建新表

Php MySql使用现有表中的列和另一个表中的不同查找创建新表,php,mysql,Php,Mysql,我在一个数据库中有两个现有表,即Table_1和Table_2 我需要将Table_1和Table_2的信息合并到一个名为Combined_Table的新表中 表_1列名称和值可以直接复制到组合_表 然后,我需要在表2中的服务描述的不同值上添加包含名称的列。每个不同的值必须成为添加到组合_表中的列名 这些新添加的列必须将其各自的值添加到正确的行中。可以通过所有表格中可用的MSISDN列来识别每一行 表1 |MSISDN |Abar Date |Upgrd |Pack Code |

我在一个数据库中有两个现有表,即
Table_1
Table_2

我需要将
Table_1
Table_2
的信息合并到一个名为
Combined_Table
的新表中

表_1
列名称和值可以直接复制到
组合_表

然后,我需要在
表2
中的
服务描述
的不同值上添加包含名称的列。每个不同的值必须成为添加到
组合_表中的列名

这些新添加的列必须将其各自的值添加到正确的行中。可以通过所有表格中可用的
MSISDN
列来识别每一行

表1

|MSISDN        |Abar Date  |Upgrd |Pack Code |Tariff               |Avg Spend |SIM Number
|--------------|-----------|------|----------|---------------------|----------|---------------------|
|9602005689344 |18-Mar-15  |Y     |MDA       |Machine2Machine Data |32.56     |89490000000000001215 |
|9602005926494 |06-Feb-15  |Y     |MLT       |Machine2Machine Lite |27.38     |89490000000000004457 |
|9602005926509 |06-Feb-15  |Y     |MLT       |Machine2Machine Lite |10.1      |89490000000000045677 |
|9602005926524 |06-Feb-15  |Y     |MLT       |Machine2Machine Lite |31.77     |89490000000000002887 |
|9602005926539 |18-Mar-15  |Y     |MDA       |Machine2Machine Data |32.36     |94900000000000100212 |
|9602006330948 |11-Mar-16  |N     |MLT       |Machine2Machine Lite |4.39      |89460000000015600111 |
|9602006330950 |11-Mar-16  |N     |MLT       |Machine2Machine Lite |4.39      |89940000000000426577 |
|--------------|-----------|------|----------|---------------------|----------|---------------------|
表2

|MSISDN         |Service Description               |Value     |
|---------------|----------------------------------|----------|
|9602005689344  |100MB                             |25.44     |
|9602005689344  |Basic Data 9600                   |0.00      |
|9602005689344  |Basic Telephony                   |6.58      |
|9602005689344  |Ebilling - Corporate CD Extract   |0.00      |
|9602005689344  |Unrestricted APN                  |0.00      |
|9602005926494  |100MB                             |25.44     |
|9602005926494  |Basic Data 9600                   |0.00      |
|9602005926494  |Basic Telephony                   |4.39      |
|9602005926494  |Ebilling - Corporate CD Extract   |0.00      |
|9602005926494  |Unrestricted APN                  |0.00      |
|9602005926509  |Basic Data 9600                   |0.00      |
|9602005926509  |Basic Telephony                   |4.39      |
|9602005926509  |Ebilling - Corporate CD Extract   |0.00      |
|9602005926509  |My Meg 0                          |0.00      |
|9602005926509  |Unrestricted APN                  |0.00      |
|9602005926524  |100MB                             |25.44     |
|9602005926524  |Basic Data 9600                   |0.00      |
|9602005926524  |Basic Telephony                   |4.39      |
|9602005926524  |Ebilling - Corporate CD Extract   |0.00      |
|9602005926524  |Unrestricted APN                  |0.00      |
|9602005926539  |100MB                             |25.44     |
|9602005926539  |Basic Data 9600                   |0.00      |
|9602005926539  |Basic Telephony                   |6.58      |
|9602005926539  |Ebilling - Corporate CD Extract   |0.00      |
|9602005926539  |Unrestricted APN                  |0.00      |
|9602006330948  |Basic Data 9600                   |0.00      |
|9602006330948  |Basic Telephony                   |4.39      |
|9602006330948  |Caller Identity FREE              |0.00      |
|9602006330948  |Ebilling - Corporate CD Extract   |0.00      |
|9602006330948  |My Meg 0                          |0.00      |
|9602006330948  |Promotional My Gig 1 - 24 Months  |0.00      |
|9602006330948  |SMS Mobile Originating            |0.00      |
|9602006330948  |Unrestricted APN                  |0.00      |
|9602006330950  |Basic Data 9600                   |0.00      |
|9602006330950  |Basic Telephony                   |4.39      |
|9602006330950  |Caller Identity FREE              |0.00      |
|9602006330950  |Ebilling - Corporate CD Extract   |0.00      |
|9602006330950  |My Meg 0                          |0.00      |
|9602006330950  |Promotional My Gig 1 - 24 Months  |0.00      |
|9602006330950  |SMS Mobile Originating            |0.00      |
|9602006330950  |Unrestricted APN                  |0.00      |
|---------------|----------------------------------|----------|
组合_表
的外观示例

|MSISDN         |Abar Date  |Upgrd  |Pack   |Code Tariff            |Avg Spend  |SIM Number             |100MB  |Basic Data 9600    |Basic Telephony    |Caller Identity FREE   |Ebilling - Corporate CD Extract    |My Meg 0   |Promotional My Gig 1 - 24 Months   |SMS Mobile Originating |Unrestricted APN   |
|9602005689344  |18-Mar-15  |Y      |MDA    |Machine2Machine Data   |32.56      |89490000000000001215   |25.44  |0.00               |6.58               |0.00                   |0.00                               |0.00       |0.00                               |0.00                   |0.00               |
|9602005926494  |06-Feb-15  |Y      |MLT    |Machine2Machine Lite   |27.38      |89490000000000004457   |25.44  |0.00               |4.39               |0.00                   |0.00                               |0.00       |0.00                               |0.00                   |0.00               |
|9602005926509  |06-Feb-15  |Y      |MLT    |Machine2Machine Lite   |10.10      |89490000000000045677   |0.00   |0.00               |4.39               |0.00                   |0.00                               |0.00       |0.00                               |0.00                   |0.00               |
|9602005926524  |06-Feb-15  |Y      |MLT    |Machine2Machine Lite   |31.77      |89490000000000002887   |25.44  |0.00               |4.39               |0.00                   |0.00                               |0.00       |0.00                               |0.00                   |0.00               |
|9602005926539  |18-Mar-15  |Y      |MDA    |Machine2Machine Data   |32.36      |89490000000000100212   |25.44  |0.00               |6.58               |0.00                   |0.00                               |0.00       |0.00                               |0.00                   |0.00               |
|9602006330948  |11-Mar-16  |N      |MLT    |Machine2Machine Lite   |4.39       |89460000000015600111   |0.00   |0.00               |4.39               |0.00                   |0.00                               |0.00       |0.00                               |0.00                   |0.00               |
|9602006330950  |11-Mar-16  |N      |MLT    |Machine2Machine Lite   |4.39       |89940000000000426577   |0.00   |0.00               |4.39               |0.00                   |0.00                               |0.00       |0.00                               |0.00                   |0.00               |
我不知道如何使用PHP创建表。 我想执行一个MySQL请求来创建和添加数据,但不知道如何开始


任何建议都会非常有用。

如果您已经知道列名(即不同的描述),那么您可以创建一个表并编写一个
选择
查询,如下所示:

SELECT MSISDN, Abar Date, Upgrd, Pack Code, Tariff, Avg Spend, SIM Number,
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = '100MB') AS 100MB,
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Basic Data 9600') AS 'Basic Data 9600',
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Basic Telephony') AS 'Basic Telephony',
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Ebilling - Corporate CD Extract') AS 'Ebilling - Corporate CD Extract',
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Unrestricted APN') AS 'Unrestricted APN'
FROM Table_1 t1;
您可以使用这些列创建一个表,并使用INSERT INTO。。选择语法,例如

INSERT INTO table_3
SELECT MSISDN, Abar Date, Upgrd, Pack Code, Tariff, Avg Spend, SIM Number,
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = '100MB') AS 100MB,
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Basic Data 9600') AS 'Basic Data 9600',
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Basic Telephony') AS 'Basic Telephony',
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Ebilling - Corporate CD Extract') AS 'Ebilling - Corporate CD Extract',
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Unrestricted APN') AS 'Unrestricted APN'
FROM Table_1 t1;
谢谢你,达珊

我使用您的建议和一些实时数据库表中的真实数据编译了以下内容

创建工作正常的临时表:

CREATE table `infolog_SIMS` (`MSISDN` VARCHAR(50), `Abar Date` VARCHAR(50), `Term Date` VARCHAR(50), `Upgrd` VARCHAR(50), `Upgrd date` VARCHAR(50), `Pack Code` VARCHAR(50), `Tariff` VARCHAR(50), `Pack Desc` VARCHAR(50), `Avg Spend` VARCHAR(50), `Stat` VARCHAR(50), `SIM Number` VARCHAR(50));
然后在临时表中添加额外的列,也可以正常工作:

ALTER TABLE `infolog_SIMS` ADD COLUMN `100MB` VARCHAR(50) NOT NULL, ADD COLUMN `Basic Data 9600` VARCHAR(50) NOT NULL, ADD COLUMN `Basic Telephony` VARCHAR(50) NOT NULL, ADD COLUMN `Ebilling Corporate CD Extract` VARCHAR(50) NOT NULL, ADD COLUMN `LTE` VARCHAR(50) NOT NULL, ADD COLUMN `MMS Standard` VARCHAR(50) NOT NULL, ADD COLUMN `Unrestricted APN` VARCHAR(50) NOT NULL, ADD COLUMN `My Meg 0` VARCHAR(50) NOT NULL, ADD COLUMN `SMS Mobile Originating` VARCHAR(50) NOT NULL, ADD COLUMN `Caller Identity FREE` VARCHAR(50) NOT NULL, ADD COLUMN `Promotional My Gig 1 24 Months` VARCHAR(50) NOT NULL, ADD COLUMN `MyMeg 30 Mobile Internet Bundle` VARCHAR(50) NOT NULL, ADD COLUMN `15MB` VARCHAR(50) NOT NULL, ADD COLUMN `SPNwww.infolog.co.za` VARCHAR(50) NOT NULL, ADD COLUMN `Make Nat. Int. Roam Calls` VARCHAR(50) NOT NULL, ADD COLUMN `Outgoing Bar` VARCHAR(50) NOT NULL;
现在,要为每行添加值,请执行以下操作:

SELECT *, (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = '100MB') AS '100MB', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Basic Data 9600') AS 'Basic Data 9600', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Basic Telephony') AS 'Basic Telephony', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Ebilling Corporate CD Extract') AS 'Ebilling Corporate CD Extract', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'LTE') AS 'LTE', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'MMS Standard') AS 'MMS Standard', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Unrestricted APN') AS 'Unrestricted APN', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'My Meg 0') AS 'My Meg 0', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'SMS Mobile Originating') AS 'SMS Mobile Originating', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Caller Identity FREE') AS 'Caller Identity FREE', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Promotional My Gig 1 24 Months') AS 'Promotional My Gig 1 24 Months', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'MyMeg 30 Mobile Internet Bundle') AS 'MyMeg 30 Mobile Internet Bundle', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = '15MB') AS '15MB', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'SPNwww.infolog.co.za') AS 'SPNwww.infolog.co.za', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Make Nat. Int. Roam Calls') AS 'Make Nat. Int. Roam Calls', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Outgoing Bar') AS 'Outgoing Bar' FROM `Infolog_temp_SDR` `t1`;
如果
Infolog\u temp\u VAS
表中不存在服务,则部分
Value
字段将返回
NULL
。如果
服务
不存在,是否可以添加
IF
条件,以将
NULL
改为
NO


注意,这不是实际的insert命令,而是select部分。

如果这是一个MySQL问题,为什么还要用Microsoft的“SQL Server”标记它?标记一个或另一个。不要同时标记这两个表。将这样的数据复制到第二个表中通常是个坏主意。创建按所需方式组合数据的视图可能是一种更好的方法。这样一来,数据就只有一个副本,你就不必担心所有的表是否保持同步。感谢Darshan。请看下面我的后续评论。@LouisMeyer我在查询中添加了
COALESCE
,现在试试?