2016-05-18 23 views
1

的数据合并到合并invoice-并从invoice和一个查询clients表对应的客户ADRESS数据我用这个语句:MySQL的:从3个表中一个结果有一个查询语句

SELECT * 
FROM invoice, clients 
WHERE invoice.client_id = clients.ID 

它作品完美。但是现在我有第三个表格进入存储invoice_items的游戏。每张发票都有一个或多个客户将收取的物品。并且每个invoice_item UPDATE都存储相应的以前生成的invoice.ID。但是如何在一个查询中合并3个表?我试过像这样:

SELECT * 
FROM invoice, invoice_item, clients 
WHERE inv_num =:num 
AND invoice.client_id = clients.ID 
AND invoice_item.inv_id = invoice.ID 

但是到目前为止我没有成功。我做错了什么?

任何帮助表示赞赏。

编辑:整个语句如下所示:

$query = $this->db_con->prepare('SELECT * FROM invoice, invoice_item, clients WHERE inv_num =:num AND invoice.client_id = clients.ID AND invoice_item.inv_id = invoice.ID'); 
$query->bindValue(':num',$val, PDO::PARAM_STR); 
$success = $query->execute(); 

$ val为从表之前选择的发票号码。

更新:

从Stivan的答案我得到以下结果模式。 假设有1张发票2 invoice_item的:

Array { 
    [0] => Array { 
      // col from table `invoice` 
      [col 1] 
      [col 2] 
      [col n] 
      // col from table `invoice_item` 
      [col 1] 
      [col 2] 
      [col n] 
      // col from table `clients` 
      [col 1] 
      [col 2] 
      [col n] 
     } 
    [1] => Array { 
      // col from table `invoice` 
      [col 1] 
      [col 2] 
      [col n] 
      // col from table `invoice_item` 
      [col 1] 
      [col 2] 
      [col n] 
      // col from table `clients` 
      [col 1] 
      [col 2] 
      [col n] 
     } 
    } 

在每个阵列我从与表invoiceclients冗余内容的参与表all columns内换句话说。

如何仅将clients的列分隔为1 col

甚至更​​好保存的recources和invoice_items从发票和附加的项目只收到1阵列*,所以它可能看起来像这样:

Array { 
[0] => Array { 
     // col from table `invoice` 
     [col 1] 
     [col 2] 
     [col n] 
     // col from table `clients` 
     [col 1] 
    } 
     Array { 
      [0] => Array { 
        // col from table `invoice_items` 
        [col 1] 
        [col 2] 
        [col n] 
        } 
      [1] => Array { 
        // col from table `invoice_items` 
        [col 1] 
        [col 2] 
        [col n] 
        } 
      } 
} 
+0

怎么不工作现有查询?它会产生错误还是只返回没有结果。发布您的表格结构,样本数据和预期结果可能会有所帮助。 – sgeddes

+0

当我使用3个表的语句时,$ success是错误的 – Ben

+0

为什么不使用连接? – Stivan

回答

1
select 
    * 
from invoice 
    left join invoice_item on invoice_item.inv_id = invoice.ID 
    left join clients on clients.ID = invoice.client_id 
where 
    invoice.inv_num = :num; //Or the table where inv_number comes from 

corrected invoice.inv_number to invoice.inv_num 
+1

宾果 - 它的作品,完美。我在invoice_table中为invoice_table存储了2个发票项目(记录),并且我返回了两个数组,这两个项目指向一个inv_id。这是正确的? – Ben

+0

@Ben是的,只要这是你期望看到的数据应该是正确的,你就传递了一个特定的inv_num。 – Stivan

+0

是的。我必须再次纠正自己。在我上面的评论中,我写了ínvoice_table,但我的意思是'invoice_item'表。无论如何,我想我需要学习'JOINS' ;-) – Ben

相关问题