2015-05-13 67 views
0

我想要做的使用MySQL查詢獲得顯着成果:MYSQL從查詢顯着成果

$sql = "SELECT un.*, co.order_product_quantity AS product_num, cu.first_name, cu.surname, cp.product_name, cp.product_thumbnail AS prod_img, co.order_goods_cost, co.order_delivery_cost, co.order_status as status 
     FROM (
      SELECT DISTINCT order_unique_id AS o_id, order_date 
      FROM cbs_orders 
      GROUP BY order_unique_id 
     ) un 
      INNER JOIN cbs_orders co ON co.order_unique_id = un.o_id 
      INNER JOIN cbs_users cu ON cu.id = co.order_user_id 
      INNER JOIN cbs_products cp ON cp.product_id = co.order_product_id 
     ORDER BY un.order_date DESC LIMIT $start_from, $num_rec_per_page "; 

我期待從查詢得到DISTINCT order_unique_id,我從來沒有寫的查詢最初,我認爲增加「SELECT DISTINCT order_unique_id」將解決問題,但它仍然帶回了重複ID。

歡呼的任何幫助球員

格雷厄姆

+0

DISTINCT選擇不同的結果行,而不是字段值。 – Uueerdo

+0

這個概念將返回不同的行,所以你需要做一些額外的操作。 – Fallenreaper

回答

0

你要正確地利用GROUP BY; DISTINCT在這種情況下不會幫助你。另外,我敢肯定,不需要子選擇。

試試這個

$sql = "SELECT un.order_unique_id AS o_id, un.order_date, 
co.order_product_quantity AS product_num, 
cu.first_name, cu.surname, cp.product_name, 
cp.product_thumbnail AS prod_img, co.order_goods_cost, 
co.order_delivery_cost, co.order_status as status 
    FROM cbs_orders AS un 
    INNER JOIN cbs_orders co ON co.order_unique_id = un.o_id 
    INNER JOIN cbs_users cu ON cu.id = co.order_user_id 
    INNER JOIN cbs_products cp ON cp.product_id = co.order_product_id 
    GROUP BY un.order_unique_id 
    ORDER BY un.order_date DESC 
    LIMIT $start_from, $num_rec_per_page "; 

這可能會產生奇怪的結果,因爲你不是在申請aggregate functions到其他列。您可能需要使用這些才能獲得理想的結果。

+0

嗨,大家好,如果在訂單表中有3 x order_unique_id的每行1個,我想最初只顯示一次,目前它循環出3次,我不是最大的查詢還沒有大聲笑我正在試驗與查詢,似乎過於複雜,我大聲笑 – graham23s

0

讓我猜測你只想記錄最近的訂單。如果是這樣的話,那麼你可以做你想做的,通過適當聚合數據:

SELECT un.*, co.order_product_quantity AS product_num, cu.first_name, 
     cu.surname, cp.product_name, cp.product_thumbnail AS prod_img, 
     co.order_goods_cost, co.order_delivery_cost, co.order_status as status 
FROM (SELECT order_unique_id AS o_id, max(order_date) as order_date 
     FROM cbs_orders 
     GROUP BY order_unique_id 
    ) un INNER JOIN 
    cbs_orders co 
    ON co.order_unique_id = un.o_id INNER JOIN 
    cbs_users cu 
    ON cu.id = co.order_user_id INNER JOIN 
    cbs_products cp 
    ON cp.product_id = co.order_product_id 
ORDER BY un.order_date DESC 
LIMIT $start_from, $num_rec_per_page; 

如果你想每筆訂單隻能使用一個行,那麼你需要弄清楚如何與做產品。在我看來,這種解釋與您目前的問題有很大不同,您應該提出另一個問題,提供樣本數據和期望的結果。