2015-04-17 49 views
1

我有一個複雜的查詢組成的大量的內部和左連接,我試圖使用SQL的COUNT函數返回某個表中的記錄數。試圖將計數函數添加到一個複雜的查詢PHP MYSQL

我正在嘗試使用proposal_id獲取每個提案的'held_proposals'表中的記錄數,因爲我將使用foreach循環將數據輸出到表中。

從本質上講,我想說明有多少學生對每個提案「舉行」提案。

這是我的嘗試:

SELECT p.proposal_id, p.proposal_title, p.description, u.user_record_id, u.forename, u.surname, c.course_title, h.*, 
GROUP_CONCAT(DISTINCT t.tag_title) AS tags FROM proposal p 

     LEFT JOIN user u on u.user_record_id = p.user_record_id 

     LEFT JOIN course_details c on c.course_code = p.course_code 

     LEFT JOIN record r on r.proposal_id = p.proposal_id 

     LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id 

     LEFT JOIN tag_details t on t.tag_code = pt.tag_code 

LEFT JOIN (
      SELECT h.student_record_id, COUNT(*) AS Held 
      FROM held_proposals h 
     ) H on h.proposal_id = p.proposal_id 
     WHERE p.source = "Supervisor" 

     AND (r.status_code not in (3,8) OR r.status_code IS NULL) 

     GROUP BY p.proposal_id; 

表目前看起來是這樣的:

Table for proposals

我想補充從「held_proposals」表中返回每個建議值表格的結尾作爲另一列。

請問我可以提供一些關於如何在SQL查詢中實現這一點的指導。先謝謝你。

+1

使用加入一些以此爲指導的查詢中的計數:http://stackoverflow.com/a/1382618/1662973 –

+0

之間是什麼關係'held_proposals'和你選擇的其他表格? –

+0

舉行的提案只包含兩個外鍵。一個用於將其鏈接到提案表的提案ID以及一個將其鏈接到用戶表以表明哪個用戶已經提交提案的student_record_id :) – user610

回答

2

您需要組您作爲

SELECT 
p.proposal_id, 
p.proposal_title, 
p.description, 
u.user_record_id, 
u.forename, 
u.surname, 
c.course_title, coalesce(h.Held,0) as `Held`, 
GROUP_CONCAT(DISTINCT t.tag_title) AS tags 
FROM proposal p 
LEFT JOIN user u on u.user_record_id = p.user_record_id 
LEFT JOIN course_details c on c.course_code = p.course_code 
LEFT JOIN record r on r.proposal_id = p.proposal_id 
LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id 
LEFT JOIN tag_details t on t.tag_code = pt.tag_code 
LEFT JOIN (
    SELECT proposal_id, COUNT(*) AS Held 
    FROM held_proposals group by proposal_id 
) h on h.proposal_id = p.proposal_id 
WHERE p.source = "Supervisor" 
AND (r.status_code not in (3,8) OR r.status_code IS NULL) 
GROUP BY p.proposal_id; 
+0

非常感謝@Abhik Chakrabortty。是否有可能進一步採取措施,並指定一個條件來說明它應該只計算尚未結束日期的記錄?即比現在更大的記錄()? – user610

+1

是的,只需在內部查詢中的'proposal by proposal_id'之前添加where條件即可。 –

+0

輝煌我會試試!謝謝 – user610