Hilfe / Tipps bei Klassenerstellung

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

  • Hilfe / Tipps bei Klassenerstellung

    Hallo Zusammen,

    Vorweg:
    ich bin noch noch nicht allzulange dabei mich mit PHP zu beschäftigen :-)

    Ich habe hier ein etwa 10 Jahre altes Projekt, dass ich "restaurieren" will.
    Dabei geht es um einen Ahnenausgabe für Hunde.
    Bislang läuft das, soweit ich beurteilen kann, ganz gut.

    Zur eigentlichen Frage:

    gibt es eine Möglichkeit /macht es Sinn die folgenden Abfragen in eine Klasse zu "stecken"?
    Weiterhin wäre es toll, wenn man die Variablen automatisch erzeugen könnte, mit Hilfe einer Schleife sozusagen.
    Das wäre insofern Hilfreich, weil die Ausgabe nicht nur auf 32 Tiere beschränkt sein soll.
    Sicherlich ist es kein Problem die List "händisch" fortzusetzten, aber schön ist das nicht :-)


    PHP-Code:
    $var mysql_fetch_array(mysql_query("select * from TAB01 where id='$id'"));
        
    $var1 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var[ver_v]' && znr='$var[znr_v]'"));
        
    $var2 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var[ver_m]' && znr='$var[znr_m]'"));
        
    $var3 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var1[ver_v]' && znr='$var1[znr_v]'"));
        
    $var4 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var1[ver_m]' && znr='$var1[znr_m]'"));
        
    $var5 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var2[ver_v]' && znr='$var2[znr_v]'"));
        
    $var6 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var2[ver_m]' && znr='$var2[znr_m]'"));
        
    $var7 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var3[ver_v]' && znr='$var3[znr_v]'"));
        
    $var8 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var3[ver_m]' && znr='$var3[znr_m]'"));
        
    $var9 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var4[ver_v]' && znr='$var4[znr_v]'"));
        
    $var10 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var4[ver_m]' && znr='$var4[znr_m]'"));
        
    $var11 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var5[ver_v]' && znr='$var5[znr_v]'"));
        
    $var12 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var5[ver_m]' && znr='$var5[znr_m]'"));
        
    $var13 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var6[ver_v]' && znr='$var6[znr_v]'"));
        
    $var14 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var6[ver_m]' && znr='$var6[znr_m]'"));
        
    $var15 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var7[ver_v]' && znr='$var7[znr_v]'"));
        
    $var16 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var7[ver_m]' && znr='$var7[znr_m]'"));
        
    $var17 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var8[ver_v]' && znr='$var8[znr_v]'"));
        
    $var18 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var8[ver_m]' && znr='$var8[znr_m]'"));
        
    $var19 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var9[ver_v]' && znr='$var9[znr_v]'"));
        
    $var20 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var9[ver_m]' && znr='$var9[znr_m]'"));
        
    $var21 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var10[ver_v]' && znr='$var10[znr_v]'"));
        
    $var22 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var10[ver_m]' && znr='$var10[znr_m]'"));
        
    $var23 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var11[ver_v]' && znr='$var11[znr_v]'"));
        
    $var24 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var11[ver_m]' && znr='$var11[znr_m]'"));
        
    $var25 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var12[ver_v]' && znr='$var12[znr_v]'"));
        
    $var26 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var12[ver_m]' && znr='$var12[znr_m]'"));
        
    $var27 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var13[ver_v]' && znr='$var13[znr_v]'"));
        
    $var28 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var13[ver_m]' && znr='$var13[znr_m]'"));
        
    $var29 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var14[ver_v]' && znr='$var14[znr_v]'"));
        
    $var30 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var14[ver_m]' && znr='$var14[znr_m]'"));
        
    $var31 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var14[ver_m]' && znr='$var14[znr_m]'")); 
    Würde mich über ein paar Tipps und Anregungen freuen :-)

  • #2
    Das "macht" so wie's da steht schon keinen Sinn.

    Beschäftige dich zuerst mit vernünftiger Datenbank-Modelierung, insb. dem Stichwort Normalisierung.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Selbstverständlich hast du Recht.
      Nur ist mir diese Datenbank nur zur Verfügung gestellt. Löschen oder ändern sollte ich sie nicht :-)

      Vlt. kannst du ja mal von der Datenbank absehen.

      Also, was genau soll jetzt passieren?
      Diese Abfrage liefert den Hund, dessen Ahnen wir uns ansehen wollen.
      PHP-Code:
      $var mysql_fetch_array(mysql_query("select * from TAB01 where id='$id'")); 
      Um jetzt zu ermitteln wer die Eltern des Hundes sind werden diese Abfragen benötigt:
      Vater (_v steht für Vater bzw _m für Mutter)
      PHP-Code:
      $var1 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var[ver_v]' && znr='$var[znr_v]'")); 
      und Mutter
      PHP-Code:
      $var2 mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var[ver_m]' && znr='$var[znr_m]'")); 
      Und so weiter.

      Der zuerst gepostete Code zeigt 4 Generationen an. Möchte ich jetzt aber zB 10 Generationen angezeigt bekommen, so müsste ich 1024 Variablen erstellen - nicht so schön :-)

      Ich vermute mal, dass ich auch mit Arrays nicht wirklich weiter komme, weil zu viele Datensätze ausgegeben werden müssen bzw. eingelesen werden.

      Kommentar


      • #4
        Du suchst einen LEFT bzw. INNER JOIN.

        Kommentar


        • #5
          Ich hatte mich schonmal an einem LEFT JOIN versucht, allerdings weiß ich nicht, wie ich da sagen kann :"zeige 4,5,6, usw Generationen an".

          Kommentar


          • #6
            In dem du die Joins in einer Schleife zusammen stoppelst ...
            Wir werden alle sterben

            Kommentar


            • #7
              hm...
              könnte ich dafür vlt. ein kleines Beispiel bekommen?

              Kommentar


              • #8
                am besten realisierst du mal den JOIN über 3 Generationen. Daran kannst du ziemlich gut sehen, welche teile in SELECT und JOIN sich immer wiederholen. Daran solltest du die schleife ableiten können.

                Wenn das nicht klappt, poste deine Versuche hier.

                Kommentar


                • #9
                  Den INNER JOIN habe ich soweit fertig (beispielhaft über 3 Gen und mit Hund ID 35). Test mit phpmyadmin funktionierte auch.

                  PHP-Code:
                  $sql "SELECT 
                    hund0.id,
                    hund0.hunderasse,
                    hund0.name,
                    hund0.zwingername,
                    hund0.verein,
                    hund0.zbnr,
                    hund1.id,
                    hund1.hunderasse,
                    hund1.name,
                    hund1.zwingername,
                    hund1.verein,
                    hund1.zbnr,
                    hund2.id,
                    hund2.hunderasse,
                    hund2.name,
                    hund2.verein,
                    hund2.zwingername,
                    hund2.zbnr,
                    hund3.id,
                    hund3.hunderasse,
                    hund3.name,
                    hund3.zwingername,
                    hund3.verein,
                    hund3.zbnr,
                    hund4.id,
                    hund4.hunderasse,
                    hund4.zwingername,
                    hund4.name,
                    hund4.verein,
                    hund4.zbnr,
                    hund5.id,
                    hund5.hunderasse,
                    hund5.name,
                    hund5.zwingername,
                    hund5.verein,
                    hund5.zbnr,
                    hund6.id,
                    hund6.hunderasse,
                    hund6.name,
                    hund6.zwingername,
                    hund6.verein,
                    hund6.zbnr,
                    hund7.id,
                    hund7.hunderasse,
                    hund7.name,
                    hund7.zwingername,
                    hund7.verein,
                    hund7.zbnr,
                    hund8.id,
                    hund8.hunderasse,
                    hund8.name,
                    hund8.zwingername,
                    hund8.zbnr,
                    hund8.verein,
                    hund9.id,
                    hund9.hunderasse,
                    hund9.name,
                    hund9.zwingername,
                    hund9.verein,
                    hund9.zbnr,
                    hund10.id,
                    hund10.hunderasse,
                    hund10.name,
                    hund10.zwingername,
                    hund10.verein,
                    hund10.zbnr
                  FROM
                    df_ahnen hund0
                    INNER JOIN df_ahnen hund1 ON (hund0.verein_v = hund1.verein)
                    AND (hund0.zbnr_v = hund1.zbnr)
                    INNER JOIN df_ahnen hund2 ON (hund0.verein_m = hund2.verein)
                    AND (hund0.zbnr_m = hund2.zbnr)
                    INNER JOIN df_ahnen hund3 ON (hund1.verein_v = hund3.verein)
                    AND (hund1.zbnr_v = hund3.zbnr)
                    INNER JOIN df_ahnen hund4 ON (hund1.verein_m = hund4.verein)
                    AND (hund1.zbnr_m = hund4.zbnr)
                    INNER JOIN df_ahnen hund5 ON (hund2.verein_v = hund5.verein)
                    AND (hund2.zbnr_v = hund5.zbnr)
                    INNER JOIN df_ahnen hund6 ON (hund2.verein_m = hund6.verein)
                    AND (hund2.zbnr_m = hund6.zbnr)
                    INNER JOIN df_ahnen hund7 ON (hund3.verein_v = hund7.verein)
                    AND (hund3.zbnr_v = hund7.zbnr)
                    INNER JOIN df_ahnen hund8 ON (hund3.verein_m = hund8.verein)
                    AND (hund3.zbnr_m = hund8.zbnr)
                    INNER JOIN df_ahnen hund9 ON (hund4.verein_v = hund9.verein)
                    AND (hund4.zbnr_v = hund9.zbnr)
                    INNER JOIN df_ahnen hund10 ON (hund4.verein_m = hund10.verein)
                    AND (hund4.zbnr_m = hund10.zbnr)
                  WHERE
                    hund0.id = 35"

                  Nur bekomme ich ich das nicht in eine Schleife bzw. vielmehr nicht in die Abfrage

                  Mein Ansatz sah wie folgt aus:
                  PHP-Code:
                  for ($i=0$i<63$i++)
                    {
                        
                  $hund 'hund'.$i;
                        for (
                  $j=1$j<63$j++)
                    {
                      
                  $abf_ahnen "SELECT     '$hund'.id
                                          '
                  $hund'.name
                                          '
                  $hund'.zwingername
                                          '
                  $hund'.verein
                                          '
                  $hund'.zbnr
                                          
                                  FROM
                                              df_ahnen '
                  $hund'
                                                  INNER JOIN df_ahnen '
                  $hund' ON ('$hund'.verein_v = '$hund.$j'.verein)
                                                  AND ('
                  $hund'.zbnr_v = '$hund.$j'.zbnr)
                                                  
                                  WHERE
                                                    hund0.id = 35"
                  ;
                                  
                  $result mysql_query($abf_ahnen);
                                  while(
                  $ahnen mysql_fetch_array($result)){
                                       
                                  }
                                                  
                         }
                        
                    } 
                  Ich denke mal, dass die Variablen völlig falsch in die Abfrage eingefügt sind.

                  Kommentar


                  • #10
                    In der Schleife sollst du nur den SQL-String zusammen bauen. mysql_query() folgt nach der Schleife.

                    Kommentar


                    • #11
                      Ich dachte du wolltes/solltest die query mittels der schleife aufbauen? Dann wärst du jetzt schon im ansatz falsch.

                      Willst du ALLES in einer Query abfragen, oder nur jeweils einen Hund und seine Eltern?

                      Kommentar


                      • #12
                        Ich würde das mit Nested Sets lösen. Wenn das nicht geht, weil das DB-Schema nicht geändert werden kann, dann würde ich die vielen Abfragen aus dem ersten Beitrag dieses Themas einfach in einer Schleife abfackeln.

                        PHP-Code:
                        $vars = array(=> mysql_fetch_array(mysql_query("select * from TAB01 where id='$id'")));
                        for (
                        $i 1$i $limit$i++) {
                            
                        $vars[$i] = mysql_fetch_array(mysql_query("select * from TAB01 where verein='".$vars[$i-1]['ver_v']."' && znr='".$vars[$i-1]['znr_v']."'"));
                        }
                        print_r($vars); 
                        So hast du zwar deutlich mehr Last auf dem DB-Server und dein Script ist nicht so flott wie es sein könnte, aber ich wette, dass es für dein Projekt allemal ausreicht.

                        Kommentar

                        Lädt...
                        X