2016-09-20 6 views
0

私はid、names、subject、およびtotalMarksを持つデータベースを持っています。各行には、学生のID、名前、科目、および各学生のための複数の行があることを意味するその合計のマークが含まれています。それは私の問題ではない。私の問題は、生徒に複数の科目がリストされていることです。つまり、1人の学生に2つの行があり、各科目に1つずつあります。私にとっては悪いことに、フォーマットオプションがあまりないシステムからエクスポートされているので、データの書式設定を管理することはあまりありません。mysqlの別の列の見出しとして列の値を使用する

以下

私が達成total marksに向かうようsubject列の値を使用して一列に同じ学生ID stdIDsubject持つ行を結合したいシステムは

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% 

どのように見えるかの例であります学生が最終的に結果を得るには、

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

は一般的に、これは、行と列を転置と呼ばれ、同じテーブルに参加します。不合理なクエリを拡張させる被験者の数が多い場合は、(あなたが本当に何をやっている知っている限り、おそらくない理想的な)、動的SQLを使用することができますか、何ができる

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 
; 

:一つの方法は次のようなものになるだろう空のデータ構造を初期化し、それから反復中に学生/被験者のペアが遭遇すると、それを適切に埋め込むことで、PHPでそれを実行します。

関連する問題