MySQL合并查询

时间:2016-06-16 08:11:55

标签: php mysql view union

我必须合并像UNION这样的2个查询的结果。我的第一个查询根据一些用户选择的条件从视图中提取几行。然后我必须使用第一个查询选择的行从第二个表中获取记录。最后,我必须按特定顺序合并2个结果集。

我试图在这里显示表格布局和查询

First_Table

First_Table_ID (Primary key)
col1
col2
col3
...

Second_Table

Second_Table_ID (Primary Key)
First_Table_ID (Foreign key to corresponding record in First table, allowed to be NULL also)
col1
col2
Col3
...

我创建了一个视图如下

    create view my_view (ID, item_typ, <oth_col_list>)
    as
        select First_Table_ID, item_typ, other_columns from First_Table 
        UNION ALL
        select Second_Table_ID, item_typ, other_columns_compatible_with_above_table from Second_Table 
where First_Table_ID is null;

首次查询

select * from my_view where <user_slected_criteria>

第二次查询     我正在使用上面结果集中的First_Table_ID运行我的PHP脚本,这会导致显着的转变时间。

foreach(result_row){
    if(row belongs to First_Table) //decided based on item_typ which is different from both tables
        select * from Second_Table where First_Table_ID = result_row.ID

此方案中的显示顺序非常重要,如下所示

my_view中的Item1

如果Second_Table中的任何相应项目显示全部

my_view中的Item2

如果Second_Table中的任何相应项目显示全部

...

我要提取的示例数据集如下

第一张表

<table><tbody><tr><th>First_Table_ID</th><th>Item_Typ</th><th>Date</th><th>Amt</th><th>Cust#</th></tr><tr><td>1</td><td>SVC</td><td>11/12/2015</td><td>10</td><td>1</td></tr><tr><td>2</td><td>SVC</td><td>11/20/2015</td><td>20</td><td>1</td></tr><tr><td>3</td><td>SVC</td><td>12/13/2015</td><td>40</td><td>1</td></tr><tr><td>4</td><td>SVC</td><td>4/1/2016</td><td>30</td><td>1</td></tr></tbody></table>

第二张表

<table><tbody><tr><th>Second_Table_ID</th><th>First_Table_ID</th><th>Item_Typ</th><th>Date</th><th>Amt</th><th>Cust#</th></tr><tr><td>1</td><td>1</td><td>PMT</td><td>11/15/2015</td><td>5</td><td>1</td></tr><tr><td>2</td><td>1</td><td>Discount</td><td>11/15/2015</td><td>5</td><td>1</td></tr><tr><td>3</td><td>2</td><td>PMT</td><td>11/25/2015</td><td>40</td><td>1</td></tr><tr><td>4</td><td>3</td><td>PMT</td><td>12/28/2015</td><td>35</td><td>1</td></tr><tr><td>5</td><td>2</td><td>Refund</td><td>12/30/2015</td><td>-15</td><td>1</td></tr><tr><td>7</td><td>NULL</td><td>PMT</td><td>1/1/2016</td><td>12</td><td>2</td></tr><tr><td>8</td><td>NULL</td><td>PMT</td><td>3/1/2016</td><td>35</td><td>3</td></tr></tbody></table>

查看输出

<table><tbody><tr><th>ID</th><th>Item_Typ</th><th>Date</th><th>Amt</th><th>Cust#</th></tr><tr><td>1</td><td>SVC</td><td>11/12/2015</td><td>10</td><td>1</td></tr><tr><td>2</td><td>SVC</td><td>11/20/2015</td><td>20</td><td>1</td></tr><tr><td>3</td><td>SVC</td><td>12/13/2015</td><td>40</td><td>1</td></tr><tr><td>4</td><td>SVC</td><td>4/1/2016</td><td>30</td><td>1</td></tr><tr><td>7</td><td>PMT</td><td>1/1/2016</td><td>12</td><td>2</td></tr><tr><td>8</td><td>PMT</td><td>3/1/2016</td><td>35</td><td>3</td></tr></tbody></table>

从第二个Table All Second table

获取Item_Typ SVC的第二个表记录之后的最终输出

<table><tbody><tr><th>Item_Typ</th><th>Date</th><th>Amt</th><th>Cust#</th><th>Balance</th></tr><tr><td>SVC</td><td>11/12/2015</td><td>10</td><td>1</td><td>0</td></tr><tr><td>PMT</td><td>11/15/2015</td><td>5</td><td>1</td><td> </td></tr><tr><td>Discount</td><td>11/15/2015</td><td>5</td><td>1</td><td> </td></tr><tr><td>SVC</td><td>11/20/2015</td><td>20</td><td>1</td><td>-5</td></tr><tr><td>PMT</td><td>11/25/2015</td><td>40</td><td>1</td><td> </td></tr><tr><td>Refund</td><td>12/30/2015</td><td>-15</td><td>1</td><td> </td></tr><tr><td>SVC</td><td>12/13/2015</td><td>40</td><td>1</td><td>5</td></tr><tr><td>PMT</td><td>12/28/2015</td><td>35</td><td>1</td><td> </td></tr><tr><td>SVC</td><td>4/1/2016</td><td>30</td><td>1</td><td>30</td></tr><tr><td>PMT</td><td>1/1/2016</td><td>12</td><td>2</td><td> </td></tr><tr><td>PMT</td><td>3/1/2016</td><td>35</td><td>3</td><td> </td></tr></tbody></table>

0 个答案:

没有答案