2012-08-28 87 views
0

嗨我有一個查詢,產生我所需要的,但我得到重複行的輸出上,無法弄清楚爲什麼,每行都出現兩次。有任何想法嗎?從MYSQL查詢結果的重複

$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>';    
+2

很可能是因爲項目表中的每個訂單可能有多個項目? –

+0

在您的查詢中嘗試使用DISTINCT。 –

回答

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 

哦,總是指定要返回的列。使用*使調試更加困難。

+0

在Join查詢中使用*的好評。總是儘量避免它,它非常好。 –

1

您的查詢應該爲該行中的每個項目返回一行。這是你所期望的嗎?如果您期望每個用戶一行或每個訂單一行,那麼您的查詢錯誤。

從你拉出的領域,我不認爲你想要的項目。試試這個查詢,而不是:

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

如果你仍然得到重複(或複製行,當你希望每個項目一個行),那麼你需要尋找到底層表上看到重複的來源。