简体   繁体   中英

Attempting to add count function to a complex query PHP MYSQL

I have a complex query consisting of lots of Inner and Left Joins and i am attempting to get the number of record back in a certain table using the COUNT Function of SQL.

I am attempting to get the number of records in the 'held_proposals' table for each proposal using the proposal_id since I'll be outputting the data into a table using a foreach loop.

In essence I would like to show how many students have 'held' a proposal against each proposal.

This was my attempt:

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;

the table currently looks like this:

提案表

I would like to add the value returned from the 'held_proposals' table for each proposal at the end of the table as another column.

Could any please provide me with some guidance as to how I can achieve this in the SQL query. Thank you in advance.

You need to group the count inside the query which you are joining something as

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM