जहाँ तक मुझे पता है, आप गतिशील रूप से 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...';
फिर 02/18/2012 से 03/18/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'
छात्र_आईडी द्वारा ग्रुप करें
ध्यान दें कि मैंने हफ्तों के बजाय दिनों को जोड़ा क्योंकि आपके उदाहरण ने बढ़ते दिनों को दिखाया, हालांकि कॉलम का नाम सप्ताह था