Mysql
 sql >> Database >  >> RDS >> Mysql

colonne dinamiche utilizzando query tabella pivot

Per quanto ne so, non è possibile aggiungere dinamicamente colonne a un'istruzione SELECT. Quello che stai chiedendo è un modo per presentare i dati e non è qualcosa che interessa a MySQL. Dovresti gestirlo nel front-end.

Tuttavia, puoi imbrogliare creando le tue query nel tuo modello e aggiungendo dinamicamente quelle nuove colonne, inserendo dinamicamente più MAX(case... alla stringa di query. Non è una bella soluzione, però.

Modifica:

Quindi, immagino tu stia parlando della brutta soluzione. Bene, in pratica dovresti creare dinamicamente la tua stringa di query (pseudocode):

$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...';

Quindi la tua query dovrebbe essere simile a questa per le date dal 18/02/2012 al 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'

GRUPPO PER student_id

Nota che ho aggiunto giorni anziché settimane perché il tuo esempio mostrava giorni in aumento, sebbene il nome della colonna fosse settimane