У меня есть запрос, который возвращает количество строк:MySQL подзапрос возвращает только одну строку
SELECT c.id AS courseID,
c.fullname AS courseName,
c.continuingeducationcredits AS cec,
cc.name AS catName,
IFNULL(ccp.name, '-No Parent Category-') AS catParent,
ue.userid AS userID,
CONCAT(u.firstname, ' ', u.lastname) AS name,
ud.data AS employeeid,
date_format(date_add('1970-01-01',interval round(c.startdate/60/60/24) DAY), '%m/%d/%Y') AS startdate,
u.id AS uid,
c.startdate AS cstartdate
FROM user_enrolments AS ue
INNER
JOIN USER AS u ON ue.userid = u.id
INNER JOIN user_info_data AS ud ON (ud.fieldid = 1
AND ud.userid = u.id)
INNER JOIN enrol AS e ON e.id = ue.enrolid
INNER JOIN course AS c ON c.id = e.courseid
INNER JOIN course_categories AS cc ON cc.id = c.category
LEFT
OUTER JOIN course_categories AS ccp ON ccp.id = cc.parent
WHERE 1 = 1
AND (cc.ID = 13
OR ccp.ID = 13)
ORDER BY catParent,
uid,
cstartdate DESC
Это прекрасно работает, и возвращает несколько строк. Но если я попытаюсь использовать его в качестве подзапроса:
SELECT *
FROM
(SELECT c.id AS courseID,
c.fullname AS courseName,
c.continuingeducationcredits AS cec,
cc.name AS catName,
IFNULL(ccp.name, '-NO Parent Category-') AS catParent, ue.userid AS userID, CONCAT(u.firstname, ' ', u.lastname) AS name,
ud.data AS employeeid,
date_format(date_add('1970-01-01',interval round(c.startdate/60/60/24) DAY), '%m/%d/%Y') AS startdate,
u.id AS uid,
c.startdate AS cstartdate
FROM user_enrolments AS ue
INNER JOIN USER AS u ON ue.userid = u.id
INNER JOIN user_info_data AS ud ON (ud.fieldid = 1
AND ud.userid = u.id)
INNER JOIN enrol AS e ON e.id = ue.enrolid
INNER JOIN course AS c ON c.id = e.courseid
INNER
JOIN course_categories AS cc ON cc.id = c.category
LEFT OUTER JOIN course_categories AS ccp ON ccp.id = cc.parent
WHERE 1 = 1
AND (cc.ID = 13
OR ccp.ID = 13)) AS Pseudotable
WHERE courseID = 8946
ORDER BY catParent,
uid,
cstartdate DESC
Он будет возвращать только один ряд.
Что я делаю неправильно? :(
Первый запрос является внутренним запросом второго запроса.
Первым запрос получает все пользователь, которые посещали курс в пределах категории. Второй предназначен для фильтрации этого набора, и получить только пользователи, которые посетили один курс.
Вы можете уменьшить запрос на основная проблема? –
Вопросы, касающиеся проблем с кодом, который вы написали, должны описывать ** конкретную проблему ** - и включать действительный код для ее воспроизведения - в самом вопросе. См. [SSCCE.org] (http://sscce.org/) для руководства. – Kermit
Это из-за этого: 'WHERE courseID = 8946' удалить это и посмотреть, если он работает –