2015-08-14 3 views
-1

course_completionsSQL подзапросы - один псевдоним столбца

+-----------------------------------------------+ 
| id coursemodid userid state timemodified | 
+-----------------------------------------------+ 
| 370  23  2   1 1433582890 | 
| 329  24  89  1 1427771915 | 
| 333  30  39  1 1428309816 | 
| 332  32  39  1 1428303307 | 
| 327  33  40  1 1427689703 | 
| 328  34  89  1 1427710711 | 
| 303  35  41  1 1410258482 | 
| 358  36  99  1 1432020067 | 
| 365  25  2   1 1433142455 | 
| 304  26  69  1 1410717866 | 
| 353  37  95  1 1430387005 | 
| 416  38  2   1 1438972465 | 
| 300  27  70  1 1409824001 | 
| 302  29  74  1 1412055704 | 
| 297  30  2   1 1409582123 | 
| 301  133  41  1 1410255923 | 
| 336  133  91  1 1428398435 | 
| 364  133  40  1 1433142348 | 
| 312  133  85  1 1425863621 | 
+-----------------------------------------------+ 

course_modules

+------------------+ 
| id course  | 
+------------------+ 
| 23  6  | 
| 24  6  | 
| 25  6  | 
| 26  6  | 
| 27  6  | 
| 28  6  | 
| 29  8  | 
| 30  8  | 
| 31  8  | 
| 32  8  | 
| 33  8  | 
| 34  5  | 
| 35  5  | 
| 36  5  | 
| 37  5  | 
| 38  5  | 
| 39  9  | 
| 40  9  | 
| 41  9  | 
+------------------+ 

course_mod_settings

+--------------------------------------+ 
|id course modinstance    | 
+--------------------------------------+ 
| 27 8   30     | 
| 28 8   31     | 
| 29 8   32     | 
| 30 8   33     | 
| 31 6   23     | 
| 32 6   24     | 
| 33 6   25     | 
| 34 6   26     | 
| 35 6   27     | 
| 36 6   28     | 
| 37 9   39     | 
| 38 9   40     | 
| 39 9   41     | 
+--------------------------------------+ 

Я пытаясь создать два подзапроса в одном SQL-заявлении, например, я хочу, чтобы значения таблиц «критерии параметров мод» находились в одном столбце и подсчитывались значения таблиц «course_completions» в одном столбце для конкретного пользователя вместе с курсом.

Не должно быть отношения между count (cms.id) и count (cc.id), за исключением идентификатора курса, поскольку count (cms.id) - это количество пользовательских модулей, а count (cc.id) - это установленный по умолчанию.

ВЫХОД:

COURSE  USERID  count(cms.id)  count(cc.id) 
6    89    3    6 
6    39    7    6 
6    40    5    6 
8    69    3    4 
8    2    0    4 
8    95    4    4 

КУРС: получение courseid

USERID: получение Идентификатор_пользователя

Количество (cms.id): получение количество завершенных пользовательских модулей.

Количества (cc.id): получение количества настроек (например: Для курса 6, подсчитывать настройки имеют 6 и конечно 4 сосчитать настройки имеет 3.

SELECT cm.course 
    ,cc.userid 
    ,count(cc.coursemodid) AS usermodules 
    ,(
     SELECT count(ccc.id) 
     FROM course_mod_settings cms 
     INNER JOIN course_modules cm ON cms.course = cm.course 
     ) AS modsettings 
FROM course_completions cc 
INNER JOIN course_modules cm ON cc.coursemodid = cm.id 
WHERE cc.STATE = 1 
GROUP BY cm.cours 
    ,cc.userid 
+2

Ваш вопрос не очень ясен, а также, пожалуйста, используйте соответствующий тег для rdbms, с которым вы работаете. –

+0

@ Zohar Peled - я четко объяснил вопрос подробно. Могу ли я узнать, где вы не получили – ronquiq

+0

Почему вы не можете сделать прямое внутреннее соединение на вашей таблице 'course_mod_settings'? – FutbolFan

ответ

0

Я прочитал ваш комментарий выше .

вы пробовали что-то вроде этого?

Я не проверял запрос, это просто мысль. я мог бы быть неправильно.

SELECT cms.course AS COURSE, cc.userid AS USERID, COUNT(cms.id), COUNT(cc.id) FROM 
course_completions AS cc 
INNER JOIN course_modules AS cm ON cc.coursemodid = cm.id 
INNER JOIN course_mod_settings AS cms cm.course = cms.course 
WHERE cc.state = 1 
GROUP BY cm.course, cc.userid 
+0

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования около '= cm.course = cms.course – ronquiq

+0

Был один дополнительный =. Я удалил это. Но я не уверен в запросе. Может быть, это может привести вас куда-нибудь. – SergeyAn

Смежные вопросы