2013-07-14 107 views
0

我試圖在下面的查詢中添加表t4的計數,但不限制結果。 喜歡的東西:MySQL左連接表中的行數

COUNT(t4.offer_to_purchase_id) AS count 

但這種限制的結果,只有那些出現在T4服務,儘管左邊的加入

$sql = "SELECT s.*, q.categories, t4.*, payments.*, quotes.* 
     FROM services s 

     LEFT JOIN 
     (
     SELECT sc.service_id, GROUP_CONCAT(c.name) categories 
     FROM services_categories sc JOIN categories c 
      ON sc.cat_id= c.cat_id 
     GROUP BY sc.service_id 
     ) q ON s.service_id = q.service_id 

     LEFT JOIN offers_to_purchase t4 
     ON s.service_id = t4.service_id 
     LEFT JOIN quotes ON quotes.service_id = s.service_id 
     LEFT JOIN payments ON payments.service_id = s.service_id 
     WHERE s.user_id = $user_id"; 

我怎樣才能做到這一點?

回答

2

它應該工作(因爲它會計算非空值),但不知道你將如何組記錄得到它,看到你似乎是從該表反正返回的所有記錄。

如果你想,可以用於所有行的數量,同時帶回從T4行反正你可以做這樣的事情: -

$sql = "SELECT s.*, q.categories, t4.*, payments.*, quotes.*, t4_2.id_count 
     FROM services s 

     LEFT JOIN 
     (
     SELECT sc.service_id, GROUP_CONCAT(c.name) categories 
     FROM services_categories sc JOIN categories c 
      ON sc.cat_id= c.cat_id 
     GROUP BY sc.service_id 
     ) q ON s.service_id = q.service_id 

     LEFT JOIN offers_to_purchase t4 
     ON s.service_id = t4.service_id 
     LEFT OUTER JOIN 
     (
     SELECT service_id, COUNT(offer_to_purchase_id) AS id_count FROM offers_to_purchase GROUP BY service_id 
    ) t4_2 
     ON s.service_id = t4_2.service_id 
     LEFT JOIN quotes ON quotes.service_id = s.service_id 
     LEFT JOIN payments ON payments.service_id = s.service_id 
     WHERE s.user_id = $user_id"; 
+0

+1 - 我同意@Kickstart的關鍵點您需要使用包含GROUP BY的SELECT第二個LEFT JOIN到offering_to_purchase表,以便能夠檢索COUNT。想知道這是否會工作,以及:AS id_count WHERE offer_to_purchase_id IS NOT NULL GROUP BY service_id' – linguanerd

+0

左外連接'SELECT COUNT(*)FROM offers_to_purchase似乎已經奏效三江源,我只需要在添加GROUP BY s.service_id查詢結束。一個用戶ID可以有幾個服務,每個服務都沒有,一個或幾個要約購買 - 只返回與該服務相關的在t4中購買的要約,而不是所有記錄 – whispersan