2012-03-05 3 views
1

J'ai une structure de base de données semi-complexe (pas vraiment, mais ce n'est pas non plus simple):MySQL, données PHP et tabulaires

appointments = id, teacher_id, child_id, slot

child = id, parent_id, name, form

parent = id, name, contact_details

teacher = id, name, subject

slot = id, time

En conséquence, je me sers d'un multiple joindre instructions SELECT pour récupérer les données dont j'ai besoin, tels que:

SELECT 
DISTINCT ((c.id +150) *1055) AS reference_number, 
p.name AS parent_name, 
c.name AS child_name, 
c.form AS child_form 
FROM appointments AS a 
INNER JOIN child AS c ON a.child_id = c.id 
INNER JOIN parent AS p ON c.parent_id = p.id 

Ce que je voudrais faire est de produire une table où les slots sont un axe et le teachers sont l'autre axe, avec le nom de l'enfant réservé pour cet enseignant dans ce créneau horaire en tant que données réelles.

Le tableau slot ressemble à ceci:

SQL query: SELECT * FROM `slots` LIMIT 0, 30 ; 
Rows: 30 

id time 
1 2012-03-15 16:00:00 
2 2012-03-15 16:05:00 
3 2012-03-15 16:10:00 
4 2012-03-15 16:15:00 
5 2012-03-15 16:20:00 
6 2012-03-15 16:25:00 
7 2012-03-15 16:30:00 
8 2012-03-15 16:35:00 
9 2012-03-15 16:40:00 
10 2012-03-15 16:45:00 
11 2012-03-15 16:50:00 
12 2012-03-15 16:55:00 
13 2012-03-15 17:00:00 
14 2012-03-15 17:05:00 
15 2012-03-15 17:10:00 
16 2012-03-15 17:15:00 
17 2012-03-15 17:20:00 
18 2012-03-15 17:25:00 

Le tableau appointments ressemble à ceci après quelques entrées:

id teacher_id child_id slot 
1 1 1 3 
2 2 1 5 
3 1 3 2 
4 2 3 6 
5 1 4 4 
6 2 4 7 
7 1 5 1 
8 2 5 9 
9 1 6 8 
10 2 6 3 

J'ai essayé de mettre quelque chose ensemble en utilisant PHP, mais il a vraiment fait mal ma tête !

Quelqu'un peut-il recommander une solution, sans utiliser de scripts externes?


EDIT selon la demande est ici une petite capture d'écran de ce que je suis en train de réaliser. Je l'ai fait en Excel mais évidemment, par sujet, je le veux en PHP/HTML.

Tabular Data?


Merci à l'avance,

+0

Veuillez montrer un petit exemple de sortie désirée. –

+0

Merci pour la suggestion @MarcusAdams - Je l'ai fait maintenant. – dunc

Répondre

1

Du haut de ma tête, je voudrais essayer quelque chose comme ça. Le premier bit est un pseudo code. Cela devrait produire une table avec tous les noms des enseignants dans la première colonne, puis une colonne pour chaque tranche de temps, puis le nom de l'enfant dans les cellules où il y a un rendez-vous réservé.

$appointments =

SELECT DISTINCT ((c.id 150) * 1055) AS REFERENCE_NUMBER, p.name AS parent_name, c.name AS child_name, c.form AS child_form, un .id AS nomme, a.fente AS slotid des rendez-vous comme un enfant INNER AS c ON REJOIGNEZ a.child_id = c.id INNER JOIN parent AS p = ON c.parent_id p.id

$teachers = id SELECT, professeur des enseignants

$slots = id SELECT, le temps des fentes

Obtenir les tableaux associatifs en sorte que vous avez $appointments$teachers$slots (vous pouvez ajouter le code pour cela)

<?php 

// simply add a blank child element to each slot 
foreach($slots as $slotKey => $slot) 
{ 
    $slots[$slotKey]['child'] = ''; 
} 

// now add the full empty slot list to all teachers 
foreach($teachers as $key => $teacher) 
{ 
    $teachers[$key]['appointments'] = $slots; 
} 

// now to fill in the child names into the teachers slots where they have an appointment 
foreach($teachers as $teacher) 
{ 
    foreach($teacher['slots'] as $slotKey => $slot) 
    { 
     foreach($appointments as $appointment) 
     { 
      if($slot['id'] == $appointment['slotid']) 
      { 
       $teacher[$key][$slotKey]['child'] = $appointment['child_name']; 
      } 
     } 
    } 
} 

// now lets output the HTML table 
?> 

<table> 

    <tr> 
     <th>Teacher</th> 
     <?php foreach($slots as $s): ?> 
      <th><?php echo $s['time']; ?></th> 
     <?php endforeach; ?> 
    </tr> 

    <?php foreach($teachers as $t): ?> 

     <tr> 

      <td><?php echo $t['name']; ?></td> 
      <?php foreach($t['slots'] as $slot): ?> 
       <td><?php echo $slot['child_name']; ?></td> 
      <?php endforeach; ?> 

     </tr> 

    <?php endforeach; ?> 

</table>