Кто-нибудь знает, можно ли перевести этот подзапрос в JOIN?Преобразуйте этот подзапрос в JOIN?
SELECT DISTINCT
lastname,
c.fullname,
(SELECT COUNT(lg.action) FROM tbl_log AS lg WHERE lg.userid = u.id AND lg.course = c.id) AS 'Total Course Hits Per Student'
FROM tbl_user AS u
JOIN tbl_user_enrolments AS ents ON ents.userid = u.id
JOIN tbl_enrol AS en ON ents.enrolid = en.id
JOIN tbl_course AS C ON c.id = en.courseid
JOIN tbl_context AS ctx ON c.id = ctx.instanceid
JOIN tbl_role_assignments AS ra ON ra.contextid = ctx.id AND ra.userid = u.id
LOG TABLE
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| id | | NO | PRI | NULL | auto_increment |
| time | | NO | | NULL | |
| userid | | NO | | NULL | |
| course | | NO | | NULL | |
| action | | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
USER Table
+--------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+----------------+
| id | | NO | PRI | NULL | auto_increment |
| username | | NO | | NULL | |
| userpassword | | NO | | NULL | |
| lastname | | NO | | NULL | |
| firstname | | NO | | NULL | |
+--------------+---------------------+------+-----+---------+----------------+
COURSE table
+--------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+----------------+
| id | | NO | PRI | NULL | auto_increment |
| category | | NO | | NULL | |
| fullname | | NO | | NULL | |
| shortname | | NO | | NULL | |
+--------------+---------------------+------+-----+---------+----------------+
Я связываю пользователей вместе через таблицы регистрации и контекста.
Спасибо за вашу помощь. Я хотел бы определить действия ученика, даже если пользователи не выполнили никаких действий (ноль). В конечном счете, я хотел бы подсчитать наименьшее число действий за курс, даже если это ноль. Надеемся, что чтение, курс, минимальное количество действий. – user3061936
Привет @luckylwk, ваш MySQL выглядит хорошо и отвечает на мой первоначальный вопрос. Я был расплывчатым в своем первом вопросе, если на курсе 20 человек, я пытаюсь найти ученика с самым низким уровнем использования. Следующий шаг - подсчитать наименьшее использование любого учащегося на курсе: 'code' SELECT u.lastname, c.fullname, MIN (COUNT (lg.action)) FROM tbl_log AS lg JOIN tbl_user AS u ON lg.userid = u.id JOIN tbl_course AS c ON lg.course = c.id GROUP BY lg.course, lg.userid 'code', но моя функция MIN() не будет работать. У меня есть недопустимое использование групповой функции. – user3061936
Это не будет работать, потому что функция MIN вернет один ряд, а не bool, из которых MIN. Вы можете ЗАКАЗАТЬ ПО СЧЕТОМ (lg.action) ASC, который поместит минимальный счет в первую строку. – luckylwk