2016-09-20 4 views
0

У меня есть база данных, которая имеет идентификаторы, имена, субъект и totalMarks. Каждая строка включает в себя идентификатор, имя, субъекты и их общие метки, что означает, что для каждого ученика имеется несколько строк. Это не моя проблема. Моя проблема заключается в том, что учащиеся имеют более одного предмета с указанием итоговых отметок ... что означает, что для 1 ученика есть две отдельные строки, по одному для каждого предмета. Настолько плохо для меня, у меня меньше контроля над форматированием данных, так как он экспортируется из системы, которая не имеет большого количества параметров форматирования.Использование значений столбца как заголовок для другого столбца в mysql

Ниже приведен пример того, как система выглядит как

id stdID  name subject  totalMarks 
1 BA53  Smith Maths   100% 
2 BA45  Emma  Maths   87% 
3 BA53  Smith English  98% 
4 BA45  Emma  English  78% 

Я хотел бы объединить строки с тем же Student ID stdID и subject в одну строку с помощью subject значений столбцов, как направляясь к total marks достигнутым студент, в идеале конечный результат будет выглядеть примерно так,

id stdID  name  Maths   English 
1 BA53  Smith 100%   98% 
2 BA45  Emma  87%    78% 

возможно ли это с помощью PHP и/или MySQL? Я не ищу, чтобы кто-нибудь написал весь код или что-то еще. Я просто не могу представить, как это сделать. Я был бы рад любому руководству/указанию на способ этого.

Как всегда, спасибо за ваше время и помощь.

ответ

0

Вы можете использовать внутреннее соединение на одной и той же таблице

select a.stdID, a.name a.subject as Maths, b.subject as English 
from my_table as a 
inner join my_table as b on a.stdID = b.stdID 
where a.subject = 'Maths' 
and b.subject ='English'; 
0

Обычно это называют перестановкой строк и столбцов. Один метод должен был бы что-то вроде:

SELECT 
    id, 
    stdID, 
    name, 
    MAX(CASE WHEN subject = 'Maths' THEN totalMarks ELSE NULL END) AS Maths, 
    MAX(CASE WHEN subject = 'English' THEN totalMarks ELSE NULL END) AS English 
FROM tablename 
GROUP BY id,stdID,name 
; 

Если есть большое количество предметов, которые делают расширение запроса необоснованное вы могли бы использовать динамический SQL (вероятно, не идеальный, если вы действительно не знаете, что вы делаете), или может сделать он на PHP, инициализируя пустую структуру данных и затем соответствующим образом заполняя ее во время итерации, когда встречаются пары ученик/субъект.

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