O ile wiem, nie można dynamicznie dodawać kolumn do instrukcji SELECT. To, o co prosisz, to sposób prezentacji danych, a to nie jest coś, o co MySQL się troszczy. Powinieneś sobie z tym poradzić z przodu.
Możesz jednak oszukiwać, tworząc zapytania w swoim modelu i dynamicznie dodając nowe kolumny, dynamicznie wstawiając więcej MAX(case...
do ciągu zapytania. Nie jest to jednak miłe rozwiązanie.
Edytuj:
Więc myślę, że mówisz o brzydkim rozwiązaniu. Cóż, w zasadzie powinieneś dynamicznie tworzyć swój ciąg zapytania (pseudokod):
$initialDay = 02/28/2012;
$lastDay = 03/28/2012;
$dayNumber = 1;
$sql = 'Select cadet_record.fname,cadet_record.lname,cadet_record.mname, student_id';
while ($initialDay <= $lastDay) {
$sql .= ', MAX(case WHEN week = $initialDay then present end) as day' . $dayNumber;
$initialDay = $initialDay + 1 day;
$dayNumber++;
}
$sql .= ' From attendance blah blah...';
Twoje zapytanie powinno wyglądać tak dla dat od 18.02.2012 do 18.03.2012:
Select cadet_record.fname,cadet_record.lname,cadet_record.mname, student_id,
,MAX(case WHEN week = '02/18/2012' then present end) as day1
,MAX(case WHEN week = '02/19/2012' then present end) as day2
From attendance
LEFT JOIN cadet_record ON cadet_record.stud_no = attendance.student_id WHERE section = '$section' AND schoolyear = '$year' AND component = '$component' AND semester = '$semester'
GROUP BY student_id
Zauważ, że dodałem dni zamiast tygodni, ponieważ twój przykład pokazał rosnącą liczbę dni, chociaż nazwa kolumny to tygodnie