2015-09-15 54 views
1

我想將限制爲timber orders查詢分配爲10。我遇到的問題是LEFT JOIN timber_order_products與LIMIT計數。 LIMIT只適用於timber_ordersMysql如何在加入表格時加入限制

 $data = $DB2->query(" 
    SELECT o.order_id 
      , o.order_status 
      , o.customer_method 
      , o.payment_method 
      , o.customer_notes 
      , o.order_date 
      , p.name product_name 
      , p.price product_price 
     FROM timber_orders o 
     LEFT 
     JOIN timber_order_products p 
     ON p.order_id = o.order_id 
     ORDER 
     BY order_id DESC 
     LIMIT 10 
     "); 

我怎麼只限制從一個特定的表的結果嗎? LIMIT 10應該只適用於timber_orders。我無法分組,因爲我需要timber_order_products行。

+0

您可以在通過子「SELECT」創建的臨時表上「加入」JOIN。在子SELECT中,將結果限制爲10,並用結果創建一個臨時表。然後'將原來的'SELECT'加入到臨時表中。儘管如此,我對MySQL語法不夠熟悉,所以我會推遲給其他人。 – War10ck

+0

我建議在timber_order_products – Kickstart

+0

@ user892134的2個字段上使用GROUP BY和GROUP_CONCAT,在回答你刪除的問題時,amdixon的解決方案是錯誤的,並且會導致基本錯誤。 – Strawberry

回答

3

您可以使用子查詢:

SELECT o.order_id , o.order_status, o.customer_method, o.payment_method, 
     o.customer_notes, o.order_date, 
     p.name as product_name, p.price as product_price 
FROM (select o.* 
     from timber_orders o 
     order by order_id desc 
     limit 10 
    ) o LEFT JOIN 
    timber_order_products p 
    on p.order_id = o.order_id 
ORDER BY o.order_id DESC 
LIMIT 10 
+0

謝謝,這個工程。 – user892134

+0

有趣。永遠不知道子選擇如何工作。今天學到了新東西。 +1 – War10ck

2

使用子查詢避免,我會使用GROUP_CONCAT。然後,可以在顯示數據的代碼中拆分產品名稱和價格: -

SELECT o.order_id 
      , o.order_status 
      , o.customer_method 
      , o.payment_method 
      , o.customer_notes 
      , o.order_date 
      , GROUP_CONCAT(CONCAT_WS('~', p.name, p.price)) AS product_name_price 
     FROM timber_orders o 
     LEFT OUTER JOIN timber_order_products p 
     ON p.order_id = o.order_id 
     GROUP BY o.order_id 
      , o.order_status 
      , o.customer_method 
      , o.payment_method 
      , o.customer_notes 
      , o.order_date 
     ORDER BY order_id DESC 
     LIMIT 10