0

こんにちは、必要なものを生成するクエリがありますが、出力に重複した行が表示され、その理由がわかりません。すべての行が 2 回表示されます。何か案は?

$query = "SELECT * FROM orders LEFT JOIN users ON orders.USER_ID = users.USER_ID
          LEFT JOIN items ON items.CHECKOUT_ID = orders.CHECKOUT_ID ORDER BY
           date_order DESC LIMIT 0,1000";



            $result = mysqli_query($con, $query);

            while($row = mysqli_fetch_array($result, MYSQL_ASSOC)){
                $order_id = $row["ORDER_ID"];
                $date_order = $row["date_order"];
                $date_req = $row["delivery"];
                $country = $row["country"];
                $firstname = $row["name"];
                $lastname = $row["surname"];
                $email = $row["email"];
                $size = $row["size"];
                $total_cost = $row["total_cost"];


                echo '<tr><td>' . $order_id . ' </td>' .
                     '<td>' . $date_order . '</td>' . 
                     '<td>' . $date_req . '</td>' . 
                     '<td>' . $country . ' </td>' . 
                     '<td>' . $firstname . ' </td>' .
                     '<td>' . $lastname . ' </td>' .
                     '<td>' . $email . ' </td>' .
                     '<td>' . $size . ' </td>' .
                     '<td>&euro;' . number_format($total_cost, 2, '.', '') . ' </td>' .
                     '<td style="text-align:right"><a href="xxxxxxx_Order_Details_Admin.php?id=' . $order_id . '">More Details</td>' .
                     '<td style="text-align:right"><a href="xxxxxxxx_Order_Details_print.php?id=' . $order_id . '">Print</td>' .

                    '</tr>';             
4

2 に答える 2

1

クエリは、行内のすべてのアイテムに対して1つの行を返す必要があります。これはあなたが期待していることですか?ユーザーごとに1行、または注文ごとに1行を期待している場合は、クエリが間違っています。

あなたが引き出している分野から、私はあなたがアイテムを欲しくないと思います。代わりに次のクエリを試してください。

SELECT *
FROM orders LEFT JOIN
     user
    ON orders.USER_ID = users.USER_ID
ORDER BY date_order DESC LIMIT 0,1000

それでも重複(またはアイテムごとに1つの行が予想される場合は重複行)が発生する場合は、基になるテーブルを調べて、重複がどこから来ているかを確認する必要があります。

于 2012-08-28T15:41:37.447 に答える
0

クエリを次のように変更します。

SELECT DISTINCT o.ORDER _ID, o.date_order, ...
FROM orders o
  LEFT JOIN users u
    ON o.USER_ID = u.USER_ID 
  LEFT JOIN items i
    ON i.CHECKOUT_ID = o.CHECKOUT_ID 
ORDER BY date_order DESC LIMIT 0,1000

ああ、常にどの列を返したいかを指定してください。を使用*すると、デバッグがはるかに難しくなります。

于 2012-08-28T11:54:13.107 に答える