Про MySQL
12 августа 2008
Только написав запрос подобный этому, понимаешь все мощь MySQL :)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| SELECT T.ID AS TEST_ID, T.NAME AS TEST_NAME, C.ID AS COURSE_ID, C.NAME AS COURSE_NAME, GB.RESULT AS POINTS, GB.MAX_RESULT AS MAX_POINTS, ROUND(GB.RESULT / GB.MAX_RESULT * 100, 1) AS PERCENTS, COUNT(DISTINCT TR.QUESTION_ID) AS QUESTIONS_COUNT, COUNT(DISTINCT if(TR.CORRECT = "Y", TR.QUESTION_ID, NULL)) AS ANSWERS_CORRECT, A.ID AS ATTEMPT_ID FROM b_learn_test T LEFT JOIN b_learn_course C ON C.ID = T.COURSE_ID LEFT JOIN b_learn_test_permission TP ON TP.TEST_ID = T.ID LEFT JOIN b_learn_test_scenario TS ON TS.TEST_ID = T.ID LEFT JOIN b_uts_user UU ON UU.UF_POST = TP.USER_POST_ID LEFT JOIN b_learn_gradebook GB ON T.ID = GB.TEST_ID LEFT JOIN b_learn_attempt A ON T.ID = A.TEST_ID LEFT JOIN b_learn_test_result TR ON A.ID = TR.ATTEMPT_ID WHERE TP.PERMISSION = "R" AND TR.STUDENT_ID = "1" AND A.STATUS = "F" GROUP BY TS.TEST_ID |
Популярность: 13%
Понравилась заметка? Подписывайся на обновления блога!
Категории:
Интернет, Разработка
Смотрите также:



Бы у меня похожий запрос 4 года назад:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19Как видишь, пришлось все COUNT заменить на поля, которые пересчитывать при необходимости (добавление/удаление/изменени записей). На самом деле много зависит от размера таблиц, частоты запросов и критичности времени выполнения :)
немного криво воткнулось, но суть понятна :)
Чуток подправил.
Я думаю для отчетов, как данных, запрашиваемых относительно нечасто и единовременно вариант с подсчетом данных в реальном времени более подходит.
И, кстати, проблема с выбором одних и тех же данных решилась заменой
UU.VALUE_ID = “1″
на
TR.STUDENT_ID = “1″
в условии
ну, так это вообще ошибка в логике была получается :)
кстати, отображается все равно некорректно.
на месте, где встречается “< ?” (без пробела) пропал код :)
UU.VALUE_ID и TR.STUDENT_ID оба содержат ID юзера.
Видать совсем глубоко в разработку ушел, давно нет постов… :)
Ага, ушел.