Abfrage in vorhandene Tabellenspalte speichern

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abfrage in vorhandene Tabellenspalte speichern

    Hallo Leute,

    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); 
    Dies gibt aber nur in mysql-front ein result, ich vermute wegen der Leerzeilen, die ich aber bewusst gemacht habe.
    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

  • #2
    irgendwie kann ich dein problem nicht nachvollziehen ... ich weiss nicht, was du bezwecken willst.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Comment


    • #3
      Es handelt sich um ein Formel1-tippspiel:

      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.
      Last edited by Conny80; 31-12-2005, 12:10.

      Comment


      • #4
        Abkürzungen in einer Tabelle durch vollständige Namen ersetzten

        Hallo Leute,

        Alles klar, die Sache ist gelöst.

        Habe aber noch eine Frage:

        Außer der Tabelle:
        kalender_2006
        -------------------
        gp_von|gp_datum

        gibts noch die Tabelle:
        tipp_2006
        -------------
        gp_von|user_ID|pole|srunde|erster|...|achter

        außerdem eine Tabelle:
        fahrer_2006
        ----------------
        fahrer_kurz|fahrer_name|fahrer_voll

        In fahrer_kurz stehen Kürzel der einzelnen Fahrer, die in allen Tabellen unter anderem auch in der Tabelle:tipp_2006 in den Spalten pole,srunde,erster,...,achter verwendet wurden, in der schlussendlichen Ausgabe sollen aber nun nicht diese Kürzel sondern die vollständigen Namen (fahrer_voll) stehen.

        Diese gigantische SELECT-Anweisung soll mir nun alle Kürzel durch den vollständigen Namen ersetzten. Gesucht werden nur Zeilen mit der user_ID = 0 und dem GP Namen (gp_von) der das neuste Datum im kalender_2006 hat.

        Gibt es da vielleicht eine kürzere elegantere Lösung?
        PHP Code:
        $jahr 2006;
        // ------------------------
        $abfrage "SELECT lang.* FROM kalender_".$jahr." RIGHT JOIN(                 
        SELECT gp_von, pp._pole, sr._srunde, _1._erster, _2._zweiter, _3._dritter, 
        _4._vierter, _5._fuenfter, _6._sechster, _7._siebter, _8._achter FROM tipp_"
        .$jahr." AS t
        LEFT JOIN (SELECT fahrer_kurz AS pp, fahrer_voll as _pole FROM fahrer_"
        .$jahr.
        GROUP BY fahrer_kurz) AS pp ON (pp=t.pole)
        LEFT JOIN (SELECT fahrer_kurz AS sr, fahrer_voll as _srunde FROM fahrer_"
        .$jahr.
        GROUP BY fahrer_kurz) AS sr ON (sr=t.srunde)
        LEFT JOIN (SELECT fahrer_kurz AS p1, fahrer_voll as _erster FROM fahrer_"
        .$jahr.
        GROUP BY fahrer_kurz) AS _1 ON (p1=t.erster)
        LEFT JOIN (SELECT fahrer_kurz AS p2, fahrer_voll as _zweiter FROM fahrer_"
        .$jahr.
        GROUP BY fahrer_kurz) AS _2 ON (p2=t.zweiter)
        LEFT JOIN (SELECT fahrer_kurz AS p3, fahrer_voll as _dritter FROM fahrer_"
        .$jahr.
        GROUP BY fahrer_kurz) AS _3 ON (p3=t.dritter)
        LEFT JOIN (SELECT fahrer_kurz AS p4, fahrer_voll as _vierter FROM fahrer_"
        .$jahr.
        GROUP BY fahrer_kurz) AS _4 ON (p4=t.vierter)
        LEFT JOIN (SELECT fahrer_kurz AS p5, fahrer_voll as _fuenfter FROM fahrer_"
        .$jahr.
        GROUP BY fahrer_kurz) AS _5 ON (p5=t.fuenfter)
        LEFT JOIN (SELECT fahrer_kurz AS p6, fahrer_voll as _sechster FROM fahrer_"
        .$jahr.
        GROUP BY fahrer_kurz) AS _6 ON (p6=t.sechster)
        LEFT JOIN (SELECT fahrer_kurz AS p7, fahrer_voll as _siebter FROM fahrer_"
        .$jahr.
        GROUP BY fahrer_kurz) AS _7 ON (p7=t.siebter)
        LEFT JOIN (SELECT fahrer_kurz AS p8, fahrer_voll as _achter FROM fahrer_"
        .$jahr.
        GROUP BY fahrer_kurz) AS _8 ON (p8=t.achter)
        WHERE user_ID= '0'
        GROUP BY (t.gp_von))AS lang 
        USING (gp_von) 
        ORDER BY gp_datum DESC LIMIT 1"

        PS: Dies liefert in MySQL-Front das gewünschte Ergebnis, online bekomme ich aber kein RESULT. Gibts sowas wie ne maximale SELECT-Anweisungslänge?

        Gruß Conny
        Last edited by Conny80; 02-01-2006, 11:54.

        Comment

        Working...
        X