0

請求書のスクリプトを作成していますが、クエリを取得すると、すべてのエントリが複数回返されます。

これは私のコードです:

$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つのエントリしか返さないはずです。

アニー・タッツ?

4

3 に答える 3

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";
于 2012-02-22T14:19:56.627 に答える
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 から削除する必要があります。

于 2012-02-22T14:20:14.880 に答える
0

顧客テーブルからのエントリはまったく制約されていないため、顧客ごとに行が返されます。テーブルスキーマについてはわかりませんが、次のようなものを追加する必要があります:

AND c.CustomerID = o.CustomerID

あなたのWHERE句に。

于 2012-02-22T14:21:42.240 に答える