2015-10-20 28 views
1

繼承人我查詢Mysql的工會,左連接,組和計數

SELECT 
    fsi_courier_assignment_print_master_listing.master_listing_id, 
    fsi_master_listing.transmittal_id, 
    fsi_transmittals.product_name, 
    fsi_transmittals.transmittal_id 
FROM fsi_courier_assignment_print_master_listing 
LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing.master_listing_id = fsi_master_listing.master_listing_id 
LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id 
WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)." 
UNION ALL 
SELECT 
    fsi_courier_assignment_print_master_listing_undelivered.master_listing_id, 
    fsi_master_listing.transmittal_id, 
    fsi_transmittals.product_name, 
    fsi_transmittals.transmittal_id 
FROM fsi_courier_assignment_print_master_listing_undelivered 
LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing_undelivered.master_listing_id = fsi_master_listing.master_listing_id 
LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id 
WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)." 

fsi_courier_assignment_print_master_listing

master_listing_id dispatch_code_id 
      2     2 
      5     2 
      36    2 
      37    2 
      134    2 
      135    2 
      136    2 
      137    2 
      138    2 
      139    2 
      140    2 

fsi_courier_assignment_print_master_listing_undelivered

master_listing_id dispatch_code_id 
      1     2 

fsi_master_listing

master_listing_id transmittal_id 
      1     1 
      2     1 
      5     2 
      36    2 
      37    2 
      134    3 
      135    3 
      136    3 
      137    3 
      138    3 
      139    3 
      140    3 

fsi_transmittals

transmittal_id product_name 
     1    Name 1 
     2    Name 2 
     3    Name 3 

什麼進出口試圖做的是從fsi_courier_assignment_print_master_listingfsi_courier_assignment_print_master_listing_undelivered獲得產品的綜合結果,其中dispatch_code_id =「2」和盡數

我的願望輸出將

Product Name Product Count 
    Name 1   2 
    Name 2   3 
    Name 3   7 

在此先感謝,希望有人能幫到我..

+0

所以你發佈的是與查詢問題? –

+0

Im stock on our query .. –

回答

1

您所查詢的是好的,你只需要:

  • 添加COUNTGROUP BY product_name,並把查詢作爲子查詢。
  • transmittal_id在兩個聯合查詢中指定了兩次,要麼刪除其中的一個,要麼賦予它們不同的名稱(它可能在MySQL中正常工作,但建議不要這樣做)。

所以,你的查詢將是這樣的:

SELECT 
    t.product_name, 
    COUNT(*) AS ProductCount 
FROM 
(
    SELECT 
     ml.master_listing_id, 
     m.transmittal_id, 
     t.product_name 
    FROM fsi_courier_assignment_print_master_listing AS ml 
    LEFT JOIN fsi_master_listing AS m 
            ON ml.master_listing_id = m.master_listing_id 
    LEFT JOIN fsi_transmittals AS t 
           ON m.transmittal_id = t.transmittal_id 
    UNION ALL 
    SELECT 
     u.master_listing_id, 
     m.transmittal_id, 
     t.product_name 
    FROM fsi_courier_assignment_print_master_listing_undelivered as u 
    LEFT JOIN fsi_master_listing AS m 
            ON u.master_listing_id = m.master_listing_id 
    LEFT JOIN fsi_transmittals AS t 
           ON m.transmittal_id = t.transmittal_id 
) AS t 
GROUP BY t.product_name; 

這會給你:

enter image description here

+0

好吧我要在家裏試試這個,以後感謝你們的幫助:D –