実行時にDB設計を変更しないでください。ただし、構造ではなくデータを変更するように設計してください。
2つのテーブルを持つことができます。 Studentと呼ばれるもの 列rollnoを使用 およびname 、多分 rollnoのPK ユニークな場合。
次に、 Thingという別のテーブルを作成します (適切な名前ですが、データが何であるかはわかりません) whenの3つの列 (日時)、値コード> (任意の適切な名前)(CHAR(1))および student ( rollnoと同じタイプ 。
両方のwhenでPKを定義する およびvalue 各生徒が日付ごとに1つの値のみを持つようにします。 Thing.studentからFKを定義します Student.rollnoへ 。これで、DBがデータの(ほとんど)一貫性を保つようになります。
さまざまな列の選択、挿入、更新のニーズに応じてインデックスを定義します。
次に、クエリを実行して両方のテーブルを結合し、目的の結果を取得します。例:
select s.name, t.value
from Student s
left join Thing t on t.student = s.rollno
where t.when == 'whenever'
(mysql方言についてはよくわかりません。そのため、さらに引用符が必要になる場合があります。お気軽に編集してください。)