Author Topic: Gruppenwechsel und Templates  (Read 550 times)

0 Members and 1 Guest are viewing this topic.

Offline WebKnight

  • Newbie
  • *
  • Posts: 4
Gruppenwechsel und Templates
on: Fri, 19. December 2008 - 15:35:03
Ich habe jetzt einen Gruppenwechsel programmiert OHNE zwei Selects zu benutzen. Hier der relevante Code:

Code: [Select]
<?php
(...)
// ABFRAGE fuer die Termine und Teilnahme
  
$abfrage SELECT termin1, mail FROM  MYSQL_TABELLE
    
 WHERE termin1 IS NOT NULL ORDER BY termin1, mail;
  
$ergebnis mysql_query($abfrage);

  
// Gruppenwechsel, Datensaetze durchlaufen
  
$loop = array();
  
$innerer_loop = array();
  while (
$datensatz mysql_fetch_assoc($ergebnis))
  {
    if (!isset(
$termin_merken))
    {
      
$termin_merken $datensatz[termin1];
    }

    if (
$termin_merken == $datensatz[termin1])
    {
      
array_push(
        
$innerer_loop,
        array(
teilnehmer => $datensatz[mail])
      );
    }
    else
    {
      
array_push(
        
$loop,
        array(
          
tag => $termin_merken// Bsp: Termin des ersten Durchlaufs
          
innerer_loop => $innerer_loop
        
)
      );

      
$termin_merken $datensatz[termin1]; // Bsp: Termin des zweiten Durchlaufs

      // inneren Loop neu initialisieren und mit dem neuen Element fuellen, denn
      // sonst geht ein Datensatz verloren
      
unset($innerer_loop);
      
$innerer_loop = array();
      
array_push(
        
$innerer_loop,
        array(
teilnehmer => $datensatz[mail])
      );
    }
  }

  
// letzten Durchlauf hinzufuegen
  
array_push(
    
$loop,
    array(
      
tag => $termin_merken,
      
innerer_loop => $innerer_loop
    
)
  );
(...)
?>

Das funktioniert so auch, aber der letzte "array_push" au�erhalb der Schleife wird bei Euch nicht verwendet. Ohne bekomme ich das aber nicht hin.

Der SELECT:

Code: [Select]
mysql> SELECT termin1, mail FROM schulungen_dms WHERE termin1 IS NOT NULL ORDER BY termin1, mail LIMIT 0, 3;
+---------------------+----------------------------+
| termin1             | mail                       |
+---------------------+----------------------------+
| 2009-01-09 09:00:00 | [email protected]       |
| 2009-01-09 09:00:00 | [email protected]   |
| 2009-01-09 09:00:00 | [email protected] |
+---------------------+----------------------------+
3 rows in set (0.00 sec)

Ideen?

CU wk
Last Edit: Fri, 19. December 2008 - 16:12:01 by WebKnight

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Re: Gruppenwechsel und Templates
Reply #1 on: Fri, 19. December 2008 - 16:13:05
Fragen zur PHP-Programmierung sind in diesem Forum Off-Topic. Trotzdem finde ich das Problem interessant und deswegen helfe ich ausnahmsweise mal ;).

Der Sourcecode sieht �bersichtlich aus und normalerweise ist es bei einem Gruppenwechsel durchaus so, dass du den ersten Datensatz seperat verarbeiten musst. Du machst es eben nicht zuerst, sondern am Ende ... v�llig ok. Trotzdem w�rde ich in Deinem Fall mit zwei Abfragen an die Datenbank gehen:


Code: [Select]
<?php
(...)
// ABFRAGE fuer die Termine und Teilnahme
  
$abfrage_welche_termine_gibt_es SELECT DISTINCT termin1 FROM  MYSQL_TABELLE
    
 WHERE termin1 IS NOT NULL ORDER BY termin1;
  
$ergebnis_welche_termine_gibt_es mysql_query($abfrage_welche_termine_gibt_es)
    or die(
<pre>MySQL-Fehler:  mysql_error() . "<br />\n ABFRAGE: " $abfrage_welche_termine_gibt_es </pre>);

  
// dwtge = datensatz_welche_termine_gibt_es
  
while ($dwtge mysql_fetch_assoc($ergebnis_welche_termine_gibt_es))
  {
    
$abfrage SELECT mail FROM  MYSQL_TABELLE
      
 WHERE termin1 = " $dwtge[termin1] . " ORDER BY mail;
    
$ergebnis mysql_query($abfrage)
      or die(
<pre>MySQL-Fehler:  mysql_error() . "<br />\n ABFRAGE: " $abfrage </pre>);

    
$innerer_loop = array();
    while (
$datensatz mysql_fetch_assoc($ergebnis))
    {
      
array_push(
        
$innerer_loop,
        array(
teilnehmer => $datensatz[mail])
      );
    }

    
array_push(
      
$loop_termin1,
      array(
        
tag => $dwtge[termin1],
        
innerer_loop => $innerer_loop
      
)
    );
  }
(...)
?>

Ist einfach k�rzer :-) ... wobei bei 100 Terminen 100 Abfragen an die Datenbank gesendet werden. Damit ist Dein Skript performanter.

Gru�
Claus