Abfrage sinnvoller gestalten?

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

  • Abfrage sinnvoller gestalten?

    Hallo, ich schreibe grad an nem Meldeskript für ne Ruderregatta, soweit so gut. Ich speichere das ganze folgendermaßen ab
    Es gibt eine Tabelle rennen, da stehen alle wesentlichen Daten zu den Rennen
    rennen:
    Nr
    Bezeichnung
    Klasse
    dann gibt es ne Tabelle mit den userdaten Vereinen und so weiter, dann gibt es die Tabelle ruderer in dem jeder Ruderer der einzelnen Vereine vertreten sind
    ruderer:
    ID
    Name
    JG
    Verein
    und in meldungen sind dann die einzelnen meldungen drin
    meldungen:
    ID
    Datum
    Verein
    Rennen
    Boot
    Namen
    in Namen stehen jetzt also alle IDs der Ruderer drin, die in dem Boot sitzen getrennt von einem Semikolon(z.B. 9;10;2;2;2;2;2;2;3; ). Das Problem ist wie man sieht, das teilweise die gleichen IDs vertreten sind, das liegt daran dass man zunächst ein Boot melden kann, wo man noch nicht genau weiß wer darin sitzt, hier werden die ruderer mit NN als Namen und NN asl JG aufgenommen. Um mir die Namen mit der richtigen Formatierung auszugeben benutze ich folgende Funktion:
    PHP-Code:
    <?php
    function schneide_Namen($namen){
            
    $teilnamen=explode(";",$namen);
            
    $groesse=sizeof($teilnamen);
            if(
    $groesse==2){
                
    $sql="SELECT Name,JG
                            FROM ruderer
                            WHERE ID='"
    .$teilnamen[0]."';";
                
    $result=mysql_query($sql) OR die(mysql_error());
                
    $row=mysql_fetch_assoc($result);
                return 
    $row['Name']." (".$row['JG'].")";
            }
            if(
    $groesse==3){
                
    $tmp=array();
                foreach(
    $teilnamen as $key => $value){
                    
    $sql="SELECT Name,JG
                                FROM ruderer
                                WHERE 
                                    ID='"
    .$teilnamen[$key]."';";
                    
    $result=mysql_query($sql) OR die(mysql_error());
                    
    $row=mysql_fetch_assoc($result);
                    
    $tmp[]=$row['Name']." (".$row['JG'].")";
                }
                return 
    $tmp[0].",".$tmp[1];
            }
            if(
    $groesse==5){
                
    $tmp=array();
                foreach(
    $teilnamen as $key => $value){
                    
    $sql="SELECT Name,JG
                                FROM ruderer
                                WHERE 
                                    ID='"
    .$teilnamen[$key]."';";
                    
    $result=mysql_query($sql) OR die(mysql_error());
                    
    $row=mysql_fetch_assoc($result);
                    
    $tmp[]=$row['Name']." (".$row['JG'].")";
                }
                return 
    $tmp[0].",".$tmp[1]."<br>".$tmp[2].",".$tmp[3];
            }
            if(
    $groesse==6){
                
    $tmp=array();
                foreach(
    $teilnamen as $key => $value){
                    
    $sql="SELECT Name,JG
                                FROM ruderer
                                WHERE 
                                    ID='"
    .$teilnamen[$key]."';";
                    
    $result=mysql_query($sql) OR die(mysql_error());
                    
    $row=mysql_fetch_assoc($result);
                    
    $tmp[]=$row['Name']." (".$row['JG'].")";
                }
                return 
    $tmp[0].",".$tmp[1]."<br>".$tmp[2].",".$tmp[3]."<br>".$tmp[4];
            }
            if(
    $groesse==10){
                
    $tmp=array();
                foreach(
    $teilnamen as $key => $value){
                    
    $sql="SELECT Name,JG
                                FROM ruderer
                                WHERE 
                                    ID='"
    .$teilnamen[$key]."';";
                    
    $result=mysql_query($sql) OR die(mysql_error());
                    
    $row=mysql_fetch_assoc($result);
                    
    $tmp[]=$row['Name']." (".$row['JG'].")";
                }
                                                    
    $tmp1=$tmp[0].",".$tmp[1]."<br>".$tmp[2].",".$tmp[3]."<br>".$tmp[4];
                                                    
    $tmp1.=",".$tmp[5]."<br>".$tmp[6].",".$tmp[7]."<br>".$tmp[8];

                return 
    $tmp1;
            }
        }
    ?>
    das ganze sähe dann zum Beispiel so aus:
    NN (NN), Max Mustermann (NN)
    NN (NN), NN (NN)
    wie ihr seht mache ich für jede ID ne Abfrage, ist nicht so toll finde ich aber wenn ich die Abfrage mit OR mache und die IDs gleich sind bekomme ich ja nur den einen Datensatz. Ich hoffe ihr versteht noch was ich meine Kann man das irgendwie besser gestalten, hatte das mal mit nem Array versucht, aber das war logisch totaler Käse..habt ihr vielleicht ne Idee?Steh n bissel aufm Schlauch

    mfg Krel
    Zuletzt geändert von krel; 01.01.2007, 18:44.

  • #2
    Kannst du kurz und bündig erklären, was dein ziel ist? Bei dem text hier, wundert mich dieses Monsterscript gar nicht.

    Kommentar


    • #3
      Sinn ist es, aus den IDs die in dem Feld mit dem Semikolon getrennt sind formatiert zurückzuliefern, das Problem ist halt dass ich IDs teilweise doppelt in dem Feld stehen habe: nehmen wir folgendes Beispiel:
      ID | Name | JG | Verein
      2 | NN | NN | 2
      3 | St:NN | NN | 2
      Auszug aus der Tabelle ruderer

      jetzt steht in der Tabelle Meldungen z.B. folgendes:
      ID | Datum | Verein | Rennen | Boot | Namen
      56 | 2006-12-31 | 2 | 4 | 3 | 2;
      54 | 2006-12-31 | 2 | 2 | 1 | 2;2;2;2;3;
      55 | 2006-12-31 | 2 | 3 | 2 | 9;10;2;2;2;2;2;2;3;
      nehmen wir jetzt zum Beispiel den Datensatz mit der ID 54, so soll schneide_Namen($namen) folgendes zurückliefern:
      NN (NN), NN (NN)<br>NN (NN), NN (NN)<br>St:NN (NN)

      das Problem ist die SQL Abfrage:
      Einfach
      PHP-Code:
      <?php
      $sql
      ="SELECT Name,JG FROM ruderer 
      WHERE 
      ID='"
      .$teilnamen[0]."' OR
      ID='"
      .$teilnamen[1]."' OR ....;";
      ?>
      liefert mir ja nur 2 Datensätze zurück, aber ich ´brauche 5 Datensätze und jetzt ist die Frage, ob man das sinnvoller machen kann, als ich das macht


      mfg

      Kommentar


      • #4
        Ich werfe jetzt mal das Wort "NORMALISIERUNG" in den Raum...

        Kommentar


        • #5
          die Tabellen sind ja soweit normalisiert, oder fällt dir ne bessere Methode ein die Namen besser zu speichern?Bis vor kurzem habe ich einfach die formatierten Namen mit Semikolon getrennt einfach in die Tabelle geschrieben, das was ich jetzt habe ist eigentlich normalisiert wenn mich nicht alles täuscht...

          mfg

          Kommentar


          • #6
            Du nennst mehrere IDs in ein Feld zu schreiben, normalisiert???

            namen durch ids zu ersetzen und dann die zugehörigen namen in eine andere tabelle zu speichern, macht noch keine normalisierung aus.

            Kommentar


            • #7
              gut, hast recht so normalisiert ist doch nicht..
              Aber welche Möglichkeit hätte ich denn noch? ich könnte weitere Felder in die Tabelle einfügen und dann jeweils eine ID in ein Feld schreiben, dann brauche ich aber 9 zusätzliche Felder und davon bleiben häufig 4 oder mehr frei..

              mfg

              Kommentar


              • #8
                Bitte lies noch mal nach, was Normalisierung ist. Ich weise dich doch nicht zum Spaß darauf hin. Das IST die ULTIMATIVE Lösung.

                Über irgendwelche Pseudo-Lösungen zerbreche ich mir dann doch nicht mehr den Kopf.

                Kommentar


                • #9
                  seh ich das richtig, dass ich also mehrere Einträge habe mit der selben ID bei der dann immer der Name variiert?Das habe ich jetzt so aus der Normalisierung bei Wikipedia rausgelesen!?

                  mfg

                  Kommentar


                  • #10
                    tab1: mit rennen
                    renn_id | datum | info

                    tab2: personen
                    person_id | name | email

                    tab3: verknüpfung
                    renn_id | person_id

                    jetzt klar?

                    Kommentar


                    • #11
                      jain, das Problem ist, dass die leute ja in einem Boot sitzen. Ich muss also einem Rennen eine Bootsnr und den Ruderer zuordnen, wäre das auch noch zulässig?
                      also praktisch
                      tab: meldungen
                      renn_id | boots_nr | ruderer_id
                      der ruderer "weiß" ja in welchem Verein er ist.
                      Was sagst dazu? Danke übrigens, dass dich damit rumschlägst Vielleicht sollte ich das auch einfach mal auf morgen verschieben...

                      mfg

                      Kommentar


                      • #12
                        wäre auch okay.

                        einze zuordnung von "boot zu rennen" und wiederum "personen zu boot" wäre normalerweise auch geeignet, aber in diesem fall natürlich unsinn, weil man ja nur in einem boot pro rennen sitzen kann.

                        Du merkst, du musst vorher genau wissen, was die situation ist.

                        daran siehst du übrigens auch gleich den großen vorteil der struktur. du kannst auch noch eine tabelle

                        "personen zu verein" einrichten. Dann könnten einzelne personen auch in mehreren vereinen mitglied sein. Falls das generell nicht möglich ist, würde man die vereins-id wiederum direkt in die personen-tabelle speichern.

                        Kommentar


                        • #13
                          naja man kann nur in einem Verein sein
                          Werde mir dann morgen weitere Gedanken machen für heute mach ich dann Feierabend..
                          danke für die Hilfe

                          mfg

                          Kommentar

                          Lädt...
                          X