2012-02-22 64 views
0

我正在制作发票脚本,但我的查询返回我的项目多次,当我拿他们。Mysql duplecating结果

这是我的代码:

$query  = " SELECT d.Quantity, d.ProductID, p.ProductName, d.UnitPrice, d.Discount 
          FROM customers AS c, orders AS o, order_details AS d, products AS p 
          WHERE o.OrderID = '10248' 
          AND o.OrderID = d.OrderID 
          AND d.ProductID = p.ProductID 
         "; 

     $result  = mysql_query($query); 

     $table  = ''; 

     while($row = mysql_fetch_assoc($result)){ 
      $table .= '<tr>'; 
      $table .= '<td>' . $row['Quantity'] . '</td>'; 
      $table .= '<td>' . $row['ProductID'] . '</td>'; 
      $table .= '<td>' . $row['ProductName'] . '</td>'; 
      $table .= '<td>' . $row['UnitPrice'] . '</td>'; 
      $table .= '<td>' . $row['Discount'] . '</td>'; 
      $table .= '<td>' . (100 - $row['Discount'])/100 * $row['UnitPrice'] . '</td>'; 
      $table .= '</tr>'; 
     } 

这是一个部分,什么返回。

Quantity ProductID ProductName  UnitPrice Discount Subtotal 
12 11 Queso Cabrales 14.0000 0 14 
10 42 Singaporean Hokkien Fried Mee 9.8000 0 9.8 
5 72 Mozzarella di Giovanni 34.8000 0 34.8 
12 11 Queso Cabrales 14.0000 0 14 
10 42 Singaporean Hokkien Fried Mee 9.8000 0 9.8 
5 72 Mozzarella di Giovanni 34.8000 0 34.8 
12 11 Queso Cabrales 14.0000 0 14 
10 42 Singaporean Hokkien Fried Mee 9.8000 0 9.8 
5 72 Mozzarella di Giovanni 34.8000 0 34.8 
12 11 Queso Cabrales 14.0000 0 14 
10 42 Singaporean Hokkien Fried Mee 9.8000 0 9.8 
5 72 Mozzarella di Giovanni 34.8000 0 34.8 

虽然它只能返回3个条目。

anny toughts?

+0

了解如何连接多个表格。有多种方法可以执行连接,一种方法是将每个元素相互组合,反之亦然(交叉表或交叉连接,也是笛卡尔连接,用于缺少连接),这就是为什么你会得到那很多结果。参见[使用MySQL,加入](http://www.keithjbrown.co.uk/vworks/mysql/mysql_p5.php) – hakre 2012-02-22 14:23:46

回答

1

你有一个笛卡儿连接:

SELECT d.Quantity, 
     d.ProductID, 
     p.ProductName, 
     d.UnitPrice, 
     d.Discount 
FROM **customers AS c,** 
     orders AS o, 
     order_details AS d, 
     products AS p 
WHERE o.OrderID = '10248' 
AND o.OrderID = d.OrderID 
AND d.ProductID = p.ProductID 

您需要包括一个连接到客户,或从SQL中删除该表。

+0

Tnx DB,总是忘记从查询中删除。在之前有客户信息但删除了它。我没有看到那个人的身影。 TNX! – Roeliee 2012-02-22 14:23:12

+0

没问题,很乐意帮忙 – 2012-02-22 14:26:58

1

您缺少客户表的加入。而是你不使用从客户表中的任何列,您可以安全地从FROM条款删除表:

$query = "SELECT d.Quantity, d.ProductID, p.ProductName, d.UnitPrice, d.Discount 
       FROM orders AS o, order_details AS d, products AS p 
        WHERE o.OrderID = '10248' 
        AND o.OrderID = d.OrderID 
        AND d.ProductID = p.ProductID"; 
0

它为每个客户返回一行,因为客户表中的条目根本没有任何限制。我不知道你的表格模式,但你应该添加类似:

AND c.CustomerID = o.CustomerID 

到你的WHERE子句。