2012-02-22 11 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

複数のテーブルを結合する方法を学びます。結合の実行方法はさまざまですが、各要素を相互に組み合わせたり(クロステーブルまたはクロス結合、欠落した結合のデカルト結合)、その理由がありますその多くの結果。 [Using MySQL、Joins](http://www.keithjbrown.co.uk/vworks/mysql/mysql_p5.php) – hakre

答えて

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を参照してください。以前は顧客情報を持っていましたが、削除しました。私はそれを見ていない私のStuipid。 TNX! – Roeliee

+0

問題ありません、喜んで助けてください –

1

customersテーブルの参加がありません。むしろあなたが顧客テーブルからすべての列を使用していないの、あなたは安全に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

customersテーブルのエントリには何も制約がないため、各顧客の行が返されます。私はあなたのテーブルのスキーマについてはよく分からないですが、あなたのようなものを追加する必要がありますあなたのWHERE句に

AND c.CustomerID = o.CustomerID 

を。