Ankündigung

Einklappen
Keine Ankündigung bisher.

Abfrageergebnis in vorhandene Tabellenspalte speichern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abfrageergebnis in vorhandene Tabellenspalte speichern

    Schönen guten Tag,

    Ursprünglich hatte ich mehrere Tabellen und zwei ineinander verschachtelte Schleifen.

    PHP-Code:
     $jahr=2006;
    // --------------------------------------------
        
    $abfrage "SELECT gp_von FROM kalender_".$jahr." ORDER BY gp_datum";
        
    $result mysql_query($abfrage,$conn); 

        
    $gp_counter = -1
        
         while ( 
    $row mysql_fetch_row($result))
         { 
           
    $gp_counter $gp_counter 1
           
    $gp_von $row[0];   

           
    $abfrage2 "SELECT * FROM tipp_".$gp_von."_".$jahr
           
    $result2 mysql_query($abfrage2,$conn); 
      
           
    $i mysql_num_rows($result2);     

           
    $teilnehmer[$gp_counter] = $i;
        } 
    Dann habe ich auf anraten verschiedener User alle Tabellen in eine gepackt und die Sache mit JOINs versucht:

    PHP-Code:
    SELECT t.* FROM kalender_2006 AS k
    LEFT JOIN 
    (SELECT gp_vonCount(gp_von) AS teilnehmer FROM tipp_punkte_2006 
    WHERE tipp 
    'U' GROUP BY gp_von) AS t
    USING 
    (gp_von)
    GROUP BY (k.gp_von); 
    Diese Abfrage liefert aber nur auf mysql-front ein result, ich denke da Leerzeilen vorhanden sind.
    Nun werden einige sagen ich müsse einen RIGHT JOIN statt einem LEFT JOIN verwenden, aber ich möchte dass das Array genau so gefüllt wird, also mit leeren Zellen, es soll nicht zusammengezogen werden, wie es beim RIGHT JOIN passieren würde.

    Am liebsten möchte ich das Abfrage-Ergebnis in einer Tabellenspalte einer anderen Tabelle speichern, jedoch da in die richtigen Zeilen. In etwa so:

    PHP-Code:
     $jahr=2006;
    // --------------------------------------------
    $abfrage "SELECT gp_von, Count(gp_von) AS tipp FROM tipp_punkte_".$jahr.
                         WHERE tipp = 'U' GROUP BY gp_von"
    ;
    $result mysql_query($abfrage,$conn); 

    $u=0;
    while (
    $row mysql_fetch_row($result))
    {
        
    $gp_von[$u] = $row[0];
        
    $teilnehmer[$u] = $row[1];
        
    $u=$u+1;
    }

    for(
    $i=0$i<mysql_num_rows($result); $i++)
    {
    $abfrage "UPDATE teilnehmer_".$jahr." SET teilnehmer = '$teilnehmer[$i]
    WHERE gp_von = '
    $gp_von[$i]'";
    $result mysql_query($abfrage,$conn); 

    Hierbei wird jedoch nur die erste Zeile abgespeichert.

    Gruß Conny

    Zur Erklärung:
    Ich habe die Tabellen:

    ***********************************
    kalender_2006:
    gp_von [CHAR] | gp_datum[DATE]
    --------------------------------------
    hier stehen alle gps mit zugehörigem Datum
    ***********************************

    ************************************************** **
    tipp_punkte_2006:
    gp_von[CHAR] | user_ID [INT] | punkte[INT] | tipp[ENUM 'U','V','A']
    -----------------------------------------------------------------------------------
    Die ausgewerteten Tipps landen in dieser Tabelle
    Sie sollen nach gp_von und tipp in 2 Gruppen:
    Gruppe1 = teilnehmer (tipp = U)
    Gruppe2 = andere (tipp = V || A)
    sortiert werden.
    ************************************************** **

    ******************************************
    teilnehmer_2006:
    gp_von [CHAR]| teilnehmer [INT]| andere [INT]
    --------------------------------------------------------------------
    nun sollen sie in dieser Tabelle abgespeichert werden
    *******************************************

    letzlich sollen zwei Arrays erzeugt werden:

    $teilnehmer = array();
    $andere = array();

    wichtig ist hier, das die Einträge die selbe Reihenfolge wie das gp_datum im kalender_2006 hat. Die Sache dabei ist, fehlt nun ein Eintrag in der Tabelle: tipp_punkte_2006, also ist eine Gruppe, die im Kalender vorkommt nicht vorhanden und eine spätere im kalender_2006 vorkommende Gruppe ist vorhanden, so soll diese Gruppe im Array nicht einfach fehlen, sondern durch '' oder 0 ersetzt werden.

    Beispiel:

    kalender_2006:
    gp_von | gp_datum
    -------------------------
    AUS|2006-03-10
    BRA|2006-04-12
    GER|2006-07-07
    ESP|2006-08-09

    tipp_punkte_2006:
    gp_von | user_ID | punkte | tipp
    -----------------------------------------
    AUS| 1| 10| U
    AUS| 3| 15| U
    AUS| 2| 12| V
    GER| 1| 11| A
    GER| 2| 14| U
    ESP| 4| 15| V
    ESP| 3| 16| A
    AUS| 4| 13| U

    teilnehmer_2006:
    gp_von | teilnehmer | andere
    AUS|3|1
    BRA|0|0
    GER|1|1
    ESP|0|2

    Die Arrays:

    $teilnehmer = array(3,0,1,0);
    $andere = array(1,0,1,2);

    Bei mir wird aber der gp_von BRA nicht erfasst, da er in tipp_punkte_2006 nicht vorhanden ist und die Arrays werden zusammengezogen.

  • #2
    Jo

    Hi,
    ...gemeiner auf offensichtlicher Tippfehler :


    im unteren Teil

    for($i=0; $i<mysql_num_rows($result); $i++)
    {
    $abfrage = "UPDATE teilnehmer_".$jahr." SET teilnehmer = '$teilnehmer[$i]'
    WHERE gp_von = '$gp_von[$i]'";
    $result = mysql_query($abfrage,$conn);
    }

    wird die Variable $result neu geschrieben, während in der For-Schleife eigentlich beabsichtigt ist, nach der Anzahl in der ersten Abfrage-Runde gefragt wird.
    Und da die UPDATE-Query genau einen Datensatz aktualisiert erhälst Du genau einen Schleifendurchlauf

    Ersetze also entweder result durch result2 oder führe eine weitere Variable ein, die mysql_num_rows nach der ersten Runde ausliest und dann als Grenze im zweiten Teil genutzt wird :

    $anzahl = mysql_num_rows($result);

    .....
    for ($i = 0 ; $i < $anzahl ; ...)


    Gruß
    McBang

    Kommentar

    Lädt...
    X