Så vitt jag vet kan du inte dynamiskt lägga till kolumner i en SELECT-sats. Det du efterfrågar är ett sätt att presentera data och det är inget MySQL bryr sig om. Du bör hantera det i fronten.
Du kan dock fuska genom att skapa dina frågor i din modell och dynamiskt lägga till dessa nya kolumner, genom att dynamiskt infoga fler MAX(case...
till frågesträngen. Det är dock ingen bra lösning.
Redigera:
Så jag antar att du pratar om den fula lösningen. Tja, i princip bör du dynamiskt skapa din frågesträng (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...';
Då bör din fråga se ut så här för datum från 2012-02-18 till 2012-03-18:
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
Lägg märke till att jag lade till dagar istället för veckor eftersom ditt exempel visade ökande dagar, även om kolumnnamnet var veckor