如何数据库查询多表关系数据库

时间:2012-10-14 21:18:16

标签: php mysql codeigniter

Customer table

///////////////////////////////////////////////////////////
|      id[PR]  |      name        |       email           |  
|      10      |      fabio       |     fab@fab.com       |   
|      11      |      james       |     james@james.com   |   

Order table

//////////////////////////////////////////////////////////////////
|  order_id[PR]  |  ship_to[FK]  |  bill_to[FK]   | customer[FK] |  product, total, etc
|      251       |       3       |         2      |       10     |  . . . 

Ship to table

//////////////////////////////////////////////////////////////////////
|   customer[FK]  |  ship_to[PR]  |   label   |    address           |  city, state, zip, etc
|       10        |      3        |   office  |  123 main st         |  . . .
|       10        |      1        |   home    |  85 some place st    |  . . .

Bill to table

///////////////////////////////////////////////////////////////////////////
|   customer[FK]  |  bill_to[PR]  |   label   |    account                |  billing details
|       10        |      2        |   visa    |  AES_CRYPT(temp storage)  |   . . .
|       10        |      1        |     mc    |  AES_CRYPT(temp storage)  |   . . .

好的,因此每位客户都可以在其帐户中存档多地址到多地付款方式。当他们下订单时,订单表存储购物车和会话信息。

我需要生成invoices如何构建我的查询,这样当我查找订单表时,我可以看到ship to table行和bill to table行而不是{关联表中行的{1}}。

现在请注意,我不希望任何人编写我的代码,但是如果可以的话请给我一些阅读的链接,这将是很棒的,或者一个例子会很棒。请注意我在codeigniter上构建,所以即时使用MVC模式。

? - 所有这些查找是否应该在1个模型函数中构建,还是应该分布在模型中的多个函数中?

id

在我的return $this->db->get('order_table')->result(); #this would return all the orders in the order table . 我会预先知道这些结果,并使订单ID成为更多详情/发票页面的链接。如何将行中的值传递给模型查询以生成正确的详细信息/发票页面?

E.g。 - 因此,如果您点击订单251,您将看到一个详细信息页面,其中包含

的发票
  1. customer id 10
  2. 姓名:fabio
  3. 电子邮件:fab@fab.com
  4. 运送至:办公室,123主要...
  5. 账单:签证,帐号#等......

1 个答案:

答案 0 :(得分:0)

$this->db->join('customerTable','customerTable.id = orderTable.customer');
$this->db->join('shipToTable', 'orderTable.ship_to = shipToTable.ship_to');
$this->db->join('billToTable', 'billToTable.bill_to = orderTable.bill_to');
$this->db->where('order_id', $orderId);
$result = $this->db->get('order_table');
if($result->num_rows()==1)
{
    return $result->result_array();
}