(
SELECT DISTINCT s.studentid, s.fname, s.lname, s.studentcode, s.courseid, u.id
FROM students as s,
courses as c, users as u, studentgrade as sg
WHERE s.courseid = '$id' and u.id = (SELECT id FROM courses WHERE courseid = '$id') and u.id = (SELECT id FROM users WHERE username = '$nombre')
)
- Query A.
(
SELECT SUM(sg.assignmentpoints) as sum
FROM assignments as sg
WHERE sg.courseid = 185
GROUP BY sg.courseid
)
- Query B.
Query A should return the same number of columns as the request B.
So In your case:
SELECT DISTINCT s.studentid, s.fname, s.lname, s.studentcode, s.courseid, u.id
FROM students as s,
courses as c, users as u, studentgrade as sg
WHERE s.courseid = '$id' and u.id = (SELECT id FROM courses WHERE courseid = '$id') and u.id = (SELECT id FROM users WHERE username = '$nombre')
UNION ALL
SELECT SUM(sg.assignmentpoints) as sum, '', '', '', '', '', '', '', '', ''
FROM assignments as sg
WHERE sg.courseid = 185
GROUP BY sg.courseid
I think you need Join, not Union.
SELECT DISTINCT s.studentid, s.fname, s.lname, s.studentcode, s.courseid, u.id
FROM students as s,
courses as c, users as u, studentgrade as sg
LEFT JOIN
(SELECT *
FROM assignments
GROUP BY courseid
) as asg on asg.courseid=s.courseid
WHERE s.courseid = '$id' and u.id = (SELECT id FROM courses WHERE courseid = '$id') and u.id = (SELECT id FROM users WHERE username = '$nombre')