2013-05-30 5 views
0

Так у меня есть 3 таблицы:Выведение MySQL результаты

student 
-studentid 
-studentname 

course_offerings 
-course_offeringid 
-course 
-type 

scores 
-student_studentid 
-course_offering_course_offeringid 
-score 

Когда я делаю запрос:

SELECT studentid, studentname, course, type, score 
FROM scores 
INNER JOIN student ON scores.student_studentid = student.studentid 
INNER JOIN course_offering ON scores.course_offering_course_offeringid = course_offering.course_offeringid 

я получаю выход что-то вроде:

studentid studentname  course type score 
123345  Doe, John  123  Exam 1 100 
123345  Doe, John  123  Exam 2 95 
123345  Doe, John  123  Exam 3 75 
123345  Doe, John  123  Final 93 
543211  Doe, Jane  123  Exam 1 70 
543211  Doe, Jane  123  Exam 2 91 
543211  Doe, Jane  123  Exam 3 99 
543211  Doe, Jane  123  Final 43 
. 
. 
. 

Что бы например, для выхода:

studentid studentname  course Exam 1 Exam 2 Exam 3 Final 
123345  Doe, John  123  100  95  75  93 
543211  Doe, Jane  123  70  91  99  43 

Возможно ли это с помощью только MySQL?

+0

Я думаю, что это возможно ... Могу ли я спросить, есть ли у вас полная структура таблицы? я думаю, что вам не хватает ученика на обеих столах. – mCube

+0

Я думаю, что там _is_ студент в 'score', и нет причин иметь его в таблице« предложений ». – kirelagin

+0

Да, я верю, что это правильно. Извини за это. Я также предлагаю удалить поле типа и поместить его в таблицу «баллов». – mCube

ответ

0

Не без hardcoding количество экзаменов. Вы могли бы взять студентов, присоединиться к ним на своих экзаменах 3 раза, убедившись, что first id < secondid < thirdid прекратит дублирование.

Если вам нужен дополнительный экзамен, или у кого-то только 2 экзамена, вам нужно будет с ним справиться. Этот тип стержня невозможен без жесткого кодирования 3 (или более/менее) соединений

0

Ну, SQL не позволит вам сделать это, поэтому, вероятно, лучше просто выполнить эту обработку в своем приложении.

Если вы действительно хотите сделать это в MySQL, вы можете использовать stored routines, которые являются немного более мощным, чем обычный SQL (например, вы можете использовать FOR-loop).

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