如何根据从不同表中选择的条件编写一个sql查询来显示来自两个表的项目

问题描述:

如何根据选择的条件编写一个sql查询以显示来自2个表的项目来自不同的表格。如何根据从不同表中选择的条件编写一个sql查询来显示来自两个表的项目

表我:

  1. 客户表中的列客户ID,姓名,地址,电话
  2. CustomerOrder表中的列客户ID,订单ID,日期,总金额,状态
  3. OrderItem的表中有列OrderID,ProductCode,UnitPrice,Qty,TotalPrice

因此,当选择一个CustomerID时,我想要显示的订单连接这3个表。所以下面它应该显示客户曾经放置过的所有订单。 我试过使用查询:

Select CustomerOrder.*, OrderItem.* 
From CustomerOrder 
INNER JOIN OrderItem Where Customer.CustomerID = $CustomerID 

但它不工作。在查询中需要帮助,并且使用php正确显示数据。

任何人都可以帮忙吗?

E.g.

CustomerID:__________ 

OrderID:__1____ Date:______ TotalAmount:______ Status:_____ 
ProductCode:__ UnitPrice:___ Qty:_____TotalPrice:__________ 
ProductCode:___ UnitPrice:______ Qty:_____ TotalPrice:_________ 

OrderID:___2___ Date:______ TotalAmount:______ Status:_____ 
ProductCode:__ UnitPrice:___ Qty:_____TotalPrice:__________ 
ProductCode:___ UnitPrice:______ Qty:_____ TotalPrice:_________ 

因为你并不需要在这一步中显示客户信息,那么您查询可以是:

SELECT co.OrderID 
,co.Date 
,co.TotalAmount 
,co.Status 
,ci.ProductCode 
,ci.UnitPrice 
,ci.Qty 
,ci.TotalPrice 
FROM CustomerOrder AS co 
INNER JOIN OrderItem AS ci ON (ci.orderID = co.OrderID) 
WHERE co.CustomerID = $customer 
ORDER BY co.OrderID, ci.ProductCode 

当你想在您的输出中没有重复的订单信息,您的PHP代码应该是这样的:

$current_order_id = false; 
foreach ($data as $row) { 
    if ($current_order_id!==$row['OrderID']) { 
     $current_order_id = $row['OrderID']; 
     echo "OrderID: ".$row['OrderID']." , Date: ".$row['Date']." , TotalAmount: ".$row['TotalAmount']." , Status: ".$row['Status']." <br>"; 
    } 
    echo "ProductCode: ".$row['ProductCode']." , UnitPrice: ".$row['UnitPrice']." , Qty: ".$row['Qty']." , TotalPrice: ".$row['TotalPrice']." <br>"; 
} 

这样做的另一种方式是首先从CustomerOrder获得所有订单信息。 然后对结果进行循环,并为每个订单获取物品信息OrderItem

+0

我在这条语句收到错误︰foreach($ data as $ row) – user1501784 2012-07-26 08:23:42

+0

错误是注意:未定义的变量:C:\ xampp \ htdocs \ listorderbycustomertest.php中的数据在线74 警告:无效的参数提供给foreach()在C:\ xampp \ htdocs \ listorderbycustomertest.php在线74 – user1501784 2012-07-26 08:25:25

+0

是这样它应该是:$ query =“SELECT co.OrderID ,co.Date .....; $ result = mysql_query($ query); \t \t $ current_order_id = false; ... ???? – user1501784 2012-07-26 08:28:49

尝试这样的: SELECT co.OrderID,date,TotalAmount,ProductCode, UnitPrice,Qty,TotalPrice,Status FROM CustomerOrder AS co INNER JOIN OrderItem AS oi ON oi.orderID = co.OrderID INNER JOIN Customer AS c ON c.CustomerID = co.CustomerID WHERE c.CustomerID = $customer

+0

表'状态'?? !! – Skrol29 2012-07-26 08:01:30

+0

@ Skrol29这个问题没有正确的格式,所以我认为Status是一张桌子。修复。 – Viskovic 2012-07-26 08:04:45

+0

查询起作用。但如何显示它在网站:( – user1501784 2012-07-26 08:07:30