Доколкото знам, не можете динамично да добавяте колони към оператор SELECT. Това, което искате, е начин за представяне на данни и това не е нещо, за което MySQL се интересува. Трябва да се справите с това в предния край.
Можете обаче да измамите, като създадете вашите заявки във вашия модел и динамично добавите тези нови колони, като динамично вмъкнете повече MAX(case...
към низа на заявката. Това обаче не е добро решение.
Редактиране:
Така че, предполагам, че говорите за грозното решение. Е, по принцип трябва динамично да създадете своя низ за заявка (псевдокод):
$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...';
Тогава вашата заявка трябва да изглежда така за дати от 18.02.2012 г. до 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'
ГРУПИРАНЕ ПО student_id
Забележете, че добавих дни вместо седмици, защото вашият пример показа нарастващи дни, въпреки че името на колоната беше седмици