2015-04-17 48 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