Problem mit DB Abfrage aus array

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

  • Problem mit DB Abfrage aus array

    Hallo,

    ich hab ein Problem mit einer DB Abfrage nach explode();
    Im Array $games habe ich dann alles was er aus der DB gefunden hat, in der DB stehen im dem Feld games kommagetrennte Werte (0,1,2,3 usw).
    Nun habe ich eine Tabelle in der zu den Zahlen in ersten Tabelle die namen dazu stehen, jeweils id und name.

    Das problem ist das es so nicht klappen kann, da je mehr einträge in der Tabelle team_singup stehen sich die ausgabe $gamenames immerwieder verdoppelt.

    Ich würde mich echt freuen wenn mir da einer weiterhelfen könnte, wie ich das hinbekommen kann.

    mein Code:
    PHP-Code:
    $query=$DB->query("SELECT * FROM ".$db_tab['team_singup']."");
        while(
    $result=$DB->fetch_array($query)) {
            
    $games=explode(','$result['games']);
            foreach(
    $games as $key => $value) {
                
    $gquery=$DB->query("SELECT gname FROM ".$db_tab['games']." WHERE gid='".$value."'");
                    while(
    $gresult=$DB->fetch_array($gquery)) {
                        
    $gamenames.=$gresult['gname'];
                    }
            }
            eval (
    "\$database_row.=\"".templateinclude("admin_showsingups_bit")."\";");
        } 

  • #2
    Die Frage ist: Was ist dein Ziel?

    Außerdem solltest du mal dein DB-Layout überdenken: Normalisierung.

    Kommentar


    • #3
      Das Ziel ist es den Zahlen die durch Checkboxen in die Datenbank kommen (daher Kommawerte), beim auslesen die namen aus der zweiten Tabelle zu geben.

      Bei der Anmeldung werden die Checkboxen als Array übergeben, mit implode schreibe ich diese dann in das Feld games(Typ SET) in der Tabelle team_singup.

      Ich wüsste nun nicht wie ich das anderst machen könnte, wenn ich für jede checkbox ein extra Feld anlege macht das in sofern keinen sinn, da ja immermal Einträge in der games Tabelle dazukommen und somit auch im Formular. Man müsste dann ja immer wieder in den Code eingreifen oder in die Tabellen.

      So muss man lediglich eine neue checkbox ins template bauen und einen Eintrag in die games Tabelle machen und schon ist das erledigt.
      Zuletzt geändert von MP27; 07.01.2006, 14:43.

      Kommentar


      • #4
        Ich wüsste nun nicht wie ich das anderst machen könnte, wenn ich für jede checkbox ein extra Feld anlege macht das in sofern keinen sinn, da ja immermal Einträge in der games Tabelle dazukommen und somit auch im Formular. Man müsste dann ja immer wieder in den Code eingreifen oder in die Tabellen.
        Nein, natürlich nicht. Hatte ich dir eben zufällig den Hinweis "Normalisierung" gegeben???

        ansonsten gäbe es natürlich noch die nicht ganz so saubere möghlichkeit:

        1) alle gname auszulesen, entsprechend ihrer id in ein array speihern array(id = > name)

        2) und dann bei der ausgabe anhand der id den namen aus dem array zu holen.

        so hast du zwei queries. Besser als n (= bis unendlich) Queries.

        Kommentar


        • #5
          Hm wenn Du mich nun aufklären kannst was Du mit "Normalisierung" meinst, könnte ich Dir vielleicht folgen.

          Kommentar


          • #6
            Wenn du ein bisschen selbstständiger wärst, würdest du sicher suchen

            Kommentar


            • #7
              Gut da hast du recht, liegt sicher auch daran weil ich schon ewig dran probiere.

              Also ich hab mir das bei wiki nun mal angeschaut und ist mir soweit auch klar. Nur das Problem ist das ich nicht drauf komme wie ich das normalisieren soll in meinem Fall.

              Wenn ich nun noch eine tabelle anlege in der ich die games zur anmelde id speichere, frage ich mich ob das sinnvoller ist.
              Zuletzt geändert von MP27; 07.01.2006, 15:28.

              Kommentar


              • #8
                Deins ist nun wirklich ein standardfall. probier mal was rum. leg dir mal ein paar testtabellen an.

                Kommentar


                • #9
                  So ich hab was geändert. Ich habe eine extra Tabelle angelegt für die nummern die ich vorher in kommawerten hatte. Nun hab ich es so versucht und hab immer noch ein problem:
                  PHP-Code:
                  $query=$DB->query("SELECT * FROM ".$db_tab['team_singup']."");
                      while(
                  $result=$DB->fetch_array($query)) {
                  $gquery=$DB->query("SELECT game FROM ".$db_tab['team_singup_games']." WHERE suid='".$result['id']."'");
                      while(
                  $gresult=$DB->fetch_array($gquery)) {
                          
                  $gkey=$gresult['game'];
                          
                  $gnquery=$DB->query("SELECT gname FROM ".$db_tab['games']." WHERE gid='".$gkey."'");
                              
                  $gnresult=$DB->fetch_array($gnquery);
                              
                  $games=$gnresult['gname'];
                           echo 
                  "$games<br>";
                                  eval (
                  "\$games_row.=\"".templateinclude("liga/admin_showsingups_games_bit")."\";");

                      }
                          eval (
                  "\$database_row.=\"".templateinclude("admin_showsingups_bit")."\";");
                      } 
                  Die ausgabe mit echo macht alles richtig, das eval gibt mir bei jedem datensatz alles doppelt aus, also wenn ich 3 Datensätze habem gibt er mir beim dritten Datensatz die werte vom 1+2+3 aus. Was zum teufel läuft da falsch?

                  Ich hoffe in Sachen DB hab ich das nun besser gemacht.

                  Kommentar


                  • #10
                    Autsch! Jetzt hast du ja noch eine weitere rekursive query eingebaut. davon solltest du eigentlich weg...

                    Kommentar


                    • #11
                      hm oweih wieder nix, watt soll ich denn machen, hab jetzt echt kein plan mehr.

                      Kommentar


                      • #12
                        ich habe dir zwei ansätze geliefert. was soll ich denn noch machen?

                        Kommentar


                        • #13
                          das ist richtig. Ich will aber auf die saubere Lösung kommen (was ich ja ned hinbekomme), nicht auf die zweite unsaubere.

                          Kommentar


                          • #14
                            so unsauber ist die eigentlich nicht. aber ansonsten schau dir die normalisierung noch mal an.

                            Kommentar


                            • #15
                              Gut soweit klar. Aber soll ich nun die Tabelle so lassen oder wieder mit kommawerten arbeiten in einem feld? bin mir jetzt nicht sicher was du mit im array speichern meintest.

                              Kommentar

                              Lädt...
                              X