Theo như tôi biết, bạn không thể thêm động các cột vào một câu lệnh SELECT. Những gì bạn đang yêu cầu là một cách trình bày dữ liệu và đó không phải là điều mà MySQL quan tâm. Bạn nên xử lý điều đó trong giao diện người dùng.
Tuy nhiên, bạn có thể gian lận bằng cách tạo các truy vấn trong mô hình của mình và thêm động các cột mới đó, bằng cách tự động chèn thêm MAX(case...
vào chuỗi truy vấn. Tuy nhiên, đó không phải là một giải pháp hay.
Chỉnh sửa:
Vì vậy, tôi đoán bạn đang nói về giải pháp xấu xí. Về cơ bản, bạn nên tạo động chuỗi truy vấn của mình (mã giả):
$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...';
Sau đó, truy vấn của bạn sẽ giống như thế này cho các ngày từ 18/02/2012 đến 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
Lưu ý rằng tôi đã thêm ngày thay vì tuần vì ví dụ của bạn hiển thị số ngày tăng lên, mặc dù tên cột là tuần