Таблица:
laterecords ----------- studentid - varchar latetime - datetime reason - varchar
Мой запрос:
SELECT laterecords.studentid, laterecords.latetime, laterecords.reason, ( SELECT Count(laterecords.studentid) FROM laterecords GROUP BY laterecords.studentid ) AS late_count FROM laterecords
Я получаю ошибку «Подзапрос MySQL с возвращением более одной строки».
Я знаю обходное решение для этого запроса, чтобы использовать следующий запрос:
SELECT laterecords.studentid, laterecords.latetime, laterecords.reason FROM laterecords
Затем, используя php loop, чтобы получить результаты и сделать ниже запрос, чтобы получить late_count
и повторить его:
SELECT Count(laterecords.studentid) AS late_count FROM laterecords
Но я думаю, что может быть лучшее решение?
Простое исправление заключается в том, чтобы добавить предложение WHERE
в ваш подзапрос:
SELECT studentid, latetime, reason, (SELECT COUNT(*) FROM laterecords AS B WHERE A.studentid = B.student.id) AS late_count FROM laterecords AS A
Лучшим вариантом (с точки зрения производительности) является использование соединения:
SELECT A.studentid, A.latetime, A.reason, B.total FROM laterecords AS A JOIN ( SELECT studentid, COUNT(*) AS total FROM laterecords GROUP BY studentid ) AS B ON A.studentid = B.studentid