Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten aus Datenbank (richtig) ausgeben.

Einklappen

Neue Werbung 2019

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

  • Daten aus Datenbank (richtig) ausgeben.

    Hallo,
    zu meinem Problem.

    Die Daten werden soweit ausgelesen wie gewünscht.
    Ich möchte aber nicht ein Land vier Mal untereinander stehen haben, sondern jedes Land nur ein Mal.

    Die Versandkosten/arten sollen dann auch in einer Zeile bei dem jeweiligen Land stehen und nicht aufgeteilt in mehreren Zeilen.

    Im Anhang befindet sich ein Screenshot der Ausgabe in PHP.

    Ich freue mich über jede Art von Lösungsansatz!

    PHP-Code:
    <?php
         
    $sql
    ="SELECT tspi_country.NameDE, tspi_versand.NameDE, tspi_versand.isNachnahme, tspi_versand.isVorauskasse, tspi_versand.isKreditkarte, tspi_versand.versand_type, tspi_versand.gebuehr FROM tspi_country, tspi_landversand, tspi_versand WHERE tspi_landversand.Ctry_ID = tspi_country.ID AND tspi_landversand.Versand_ID = tspi_versand.ID AND tspi_versand.versand_type = 0 AND tspi_versand.gebuehr > 0 AND tspi_versand.NurIntern = 0";
    $res=send_sql($db,$sql);
    $row=mysql_fetch_row($res);

    echo 
    "<table width='100%' border='1'><tr><td width='120'>Land</td><td width='100'>Nachname</td><td width='100'>Vorauskasse</td><td width='100'>Kreditkarte</td><td width='130'>Versandname</td><td>Gebuehr</td></tr></table>";

    while(
    $row mysql_fetch_array($res)) {

    $landname $row[0];
    $versandname $row[1];
    $nachnahme $row[2];
    $vorauskasse $row[3];
    $kreditkarte $row[4];
    $versand_type $row[5];
    $gebuehr $row[6];

        if (
    $nachnahme == &&  $vorauskasse == &&  $kreditkarte == 0){
            }else{
            
        if (
    $nachnahme == 1){
            
    $nachnahme "<img src='../img/ja.jpg'>";
        
            }
        else  if(
    $nachnahme == 0){ 
             
    $nachnahme "<img src='../img/nein.jpg'>";
            
             }
        if (
    $vorauskasse == 1){
            
    $vorauskasse "<img src='../img/ja.jpg'>";
            
            }
        else  if(
    $vorauskasse == 0){ 
             
    $vorauskasse "<img src='../img/nein.jpg'>";
            
             }
        if (
    $kreditkarte == 1){
            
    $kreditkarte "<img src='../img/ja.jpg'>";
            
            }
        else  if(
    $kreditkarte == 0){ 
             
    $kreditkarte "<img src='../img/nein.jpg'>";
            
             }
            
            
            echo 
    "<table width='100%' border='1'><tr><td width='120'>".$landname."</td><td width='100'>".$nachnahme.$gebuehr."</td><td width='100'>".$vorauskasse.$gebuehr."</td>
            <td width='100'>"
    .$kreditkarte.$gebuehr."<br />\n</td><td width='130'>".$versandname."<br />\n</td><td >".$gebuehr."<br />\n</td></tr></table>";

            
        }
        
    }

    ?>


  • #2
    Hi,

    vielleicht hilft dir die GROUP BY-Klausel.
    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

    Kommentar


    • #3
      Hi Manko10,
      ich habe mir mal das GOUP BY angeschaut. Der Ansatz geht in die richtige Richtung! Ich erziele nur das gewünschte Ergebniss nicht!

      Wenn du ein wenig mehr Zeit hättest und ein bisschen ins Detail gehen könntest wäre nett.

      Kommentar


      • #4
        Es wird schwierig, die Versandarten und die Gebühren wirklich in eine Zeile zu schreiben, da es doch immer noch unterschiedliche Datensätze aus verschiedenen Tabellen sind.

        Im Grunde müsstest du für jedes Land einzelne Abfragen starten. GROUP BY wäre nur ein Ansatz. Es bewirkt zwar, dass du jedes Land nur einmal in der Liste hast, aber zu diesem Land wird auch nur eine Zahlungsart und eine Gebühr angezeigt.
        Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

        Kommentar


        • #5
          Zitat von Manko10 Beitrag anzeigen
          Es wird schwierig, die Versandarten und die Gebühren wirklich in eine Zeile zu schreiben, da es doch immer noch unterschiedliche Datensätze aus verschiedenen Tabellen sind.
          Schwierig eingentlich nicht. Er muss eben einfach bei der Ausgabe prüfen ob das Land verglichen zum vorherigen Schleifendurchlauf gewechselt hat - falls ja eine neue Tabellen-Zeile anfangen falls nein eben nicht (dazu muss natürlich ensprechend mir ORDER BY sortiert sein...)
          Create your own quiz show.

          Kommentar


          • #6
            Ja, gut. Auf diese Weise ist es nicht schwer. Das ist mir schon klar.
            Nur habe ich immer den Ansatz, das direkt mit MySQL zu machen und da wird es schwer, bzw. unmöglich.

            *Verteidigung beendet*
            Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

            Kommentar


            • #7
              Hi agrajag,

              wie würde eine solche Prüfung aussehen?
              Hab grad ein bisschen rum getüftelt aber "leider" ohne Erfolg.

              Kommentar


              • #8
                Das ganze machst du per PHP.
                In der Schleife, die du bei der Ausgabe durchläufst, speicherst du in einer Variablen das Land. Im nächsten Durchlauf prüfst du dann, ist das aktuelle Land dasselbe wie das gespeicherte? Wenn ja, dann mache ich dies, ansonsten jenes und speichere das neue Land in der Variablen.
                Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                Kommentar


                • #9
                  Zitat von Manko10 Beitrag anzeigen
                  Das ganze machst du per PHP.
                  Hehe, nichts für ungut aber soweit war ich auch schon ..

                  Ich hatte mehr an ein Beispiel gedacht. Versucht es so zu machen habe ich ja schon, ohne Erfolg. Ich werde jetzt noch ein paar Dinge testen und dann schlafen gehen.... PHP macht Kopfschmerzen . Ich danke euch beiden schon mal für eure Zeit.

                  Kommentar


                  • #10
                    Keine Ursache.
                    Also ich würde es in etwa so machen:
                    PHP-Code:
                    $data = array();
                    $key  0;

                    for (
                    $i 0$row mysql_fetch_assoc($res); $i++) {
                        if (
                    $row["NameDE"] == $data[$key]["NameDE"]) {
                            
                    $data[$key]["versand_type"] .= ", ".$row["versand_type"];
                            
                    $data[$key]["gebuehr"]      .= ", ".$row["gebuehr"];
                        } else {
                            
                    $data[] = $row;
                            
                    $key    $i;
                        }

                    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                    Kommentar


                    • #11
                      Zweiter Versuch

                      Hi Manko10 und andere Leser,

                      ich hab es so versucht wie von dir geschildert, aber es kam leider nix bei rum .

                      Danach habe ich etwas anderes ausprobiert. Dies scheint fast zu funktionieren , aber nur fast...

                      Länder werden teilweise nicht ausgegeben und Versand/Zahlungarten sind auch nicht richtig.

                      Da ich schon wieder zu viel Zeit verloren habe, muss ich mich schon wieder an dich/euch wenden.

                      PHP-Code:
                      <?php
                           
                      $sql
                      ="SELECT tspi_country.NameDE, tspi_versand.NameDE, tspi_versand.isNachnahme, tspi_versand.isVorauskasse, tspi_versand.isKreditkarte, tspi_versand.versand_type, tspi_versand.gebuehr FROM tspi_country, tspi_landversand, tspi_versand WHERE tspi_landversand.Ctry_ID = tspi_country.ID AND tspi_landversand.Versand_ID = tspi_versand.ID AND tspi_versand.versand_type = 0 AND tspi_versand.gebuehr > 0 AND tspi_versand.NurIntern = 0 ORDER BY tspi_country.NameDE";

                      $res=send_sql($db,$sql);
                      $row=mysql_fetch_row($res);

                      echo 
                      "<table width='100%' border='1'><tr><td width='120'>Land</td><td width='100'>Nachname</td><td width='100'>Vorauskasse</td><td width='100'>Kreditkarte</td></tr></table>";


                      while(
                      $row mysql_fetch_array($res)) {

                      $landname $row[0];
                      $versandname $row[1];
                      $nachnahme $row[2];
                      $vorauskasse $row[3];
                      $kreditkarte $row[4];
                      $versand_type $row[5];
                      $gebuehr $row[6];

                          if (
                      $nachnahme == &&  $vorauskasse == &&  $kreditkarte == 0){
                              }else{
                              
                          if (
                      $nachnahme == 1){
                              
                      $nachnahme "<img src='../img/ja.jpg'>";
                          
                              }
                          else  if(
                      $nachnahme == 0){ 
                               
                      $nachnahme "<img src='../img/nein.jpg'>";
                              
                               }
                          if (
                      $vorauskasse == 1){
                              
                      $vorauskasse "<img src='../img/ja.jpg'>";
                              
                              }
                          else  if(
                      $vorauskasse == 0){ 
                               
                      $vorauskasse "<img src='../img/nein.jpg'>";
                              
                               }
                          if (
                      $kreditkarte == 1){
                              
                      $kreditkarte "<img src='../img/ja.jpg'>";
                              
                              }
                          else  if(
                      $kreditkarte == 0){ 
                               
                      $kreditkarte "<img src='../img/nein.jpg'>";
                              
                               }
                              
                          if (
                      $tmplandname != $landname && isset($tmplandname)) {
                              
                              echo 
                      "<table width='100%' border='1'><tr><td width='120'>";
                              echo 
                      $landname;
                              echo 
                      "</td><td width='100'>".$nachnahme.$gebuehr."</td><td width='100'>".$vorauskasse.$gebuehr."</td><td width='100'>".$kreditkarte.$gebuehr."<br />\n</td></tr></table>";
                              
                              
                      $tmpvorkasse 0;
                              
                      $tmpnachname 0;
                              
                      $tmpkreditkarte 0;

                              } else {
                          if (
                      $tmpvorkasse != 1) {
                              
                      $tmpvorkasse == $vorauskasse;
                              }
                          if (
                      $tmpnachname != 1) {
                              
                      $tmpnachname == $nachname;
                              }
                          if (
                      $tmpkreditkarte != 1) {
                              
                      $tmpkreditkarte == $kreditkarte;
                              }
                              
                              }
                               
                              
                      $tmplandname $landname;
                              
                              }
                          }
                          
                      ?>

                      Wie könnte es funktionieren oder besser noch.... wie funktioniert es?

                      Kommentar


                      • #12
                        Hi,

                        wieso liest du ganz zu Anfang schon eine Zeile der Rückgabe aus, ohne sie zu verarbeiten? Danach wird mit der nächsten zeile weitergemacht. Die erste Zeile geht somit verloren.

                        Wenn du etwas Variablenspeicher sparen willst, kannst du die Daten auch direkt in der Schleife schon ausgeben.
                        Hierbei musst du aber beachten, dass du wie vorher immer die Prüfung ausführst, ob das Land neu ist.
                        Wenn das Land neu ist, fügst du mit <tr> eine neue Zeile ein und schreibst die Länderinformationen. Zahlungsart und -Gebühr speicherst du aber nach wie vor in Variablen.
                        Erst wenn das Land wechselst, gibst du diese gesammelt in der Tabelle aus und fügst das abschließende </tr>.
                        Danach wiederholst du den Vorgang (ich hoffe, du konntest mir folgen, wenn nicht, nochmal fragen ).
                        Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                        Kommentar


                        • #13
                          Hey Manko10,
                          da bin ich wieder .
                          Ah Merci, das habe ich gleich mal verbessert.
                          Beim Rest kann ich dir nicht ganz folgen.
                          Kann es mir nicht wirklich vorstellen, an welche stelle genau die Ausgabe für Land und dann für Zahlungsart kommt. Hast Du noch nen Tipp für mich?!

                          Kommentar


                          • #14
                            Ja, klar.
                            Ich wollte damit sagen, dass du nicht erst alles in einem Mega-Array speicherst, sondern gleich während der Schleife ausgibst.
                            Nun stehst du aber vor dem Problem, dass du ja eben nicht jedes Land doppelt ausgeben willst und wenn du pro Durchlauf einfach eine Zeile ausgibst, hast du keine Möglichkeit mehr, die Zahlungsarten und -Gebühren zu verketten und auf einmal auszugeben.
                            Also gibst du die allgemeinen Informationen schon aus, die Arten und Gebühren sowie das schließende </tr> aber noch nicht.
                            Nun speicherst du wieder das aktuelle Land. Das vergleichst du immer am Schleifenanfang. Wenn das Land dasselbe ist, dann hängst due die Art und die Gebühr an die Variable.
                            Ist das Land jedoch anders, so gibst du die Arten und Gebühren sowie das schließende </tr> aus.
                            Nächste Zeile, nächstes Land.

                            Habe ich mich diesmal verständlicher ausgedrückt?
                            Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                            Kommentar


                            • #15
                              Hi,
                              ja hast Du... Ich habe es trotzdem nicht verstanden...
                              Ich drehe mich im Kreis... Schau selbst!

                              PHP-Code:
                              <?php
                                   
                              $sql
                              ="SELECT tspi_country.NameDE, tspi_versand.NameDE, tspi_versand.isNachnahme, tspi_versand.isVorauskasse, tspi_versand.isKreditkarte, tspi_versand.versand_type, tspi_versand.gebuehr FROM tspi_country, tspi_landversand, tspi_versand WHERE tspi_landversand.Ctry_ID = tspi_country.ID AND tspi_landversand.Versand_ID = tspi_versand.ID AND tspi_versand.versand_type = 0 AND tspi_versand.gebuehr > 0 AND tspi_versand.NurIntern = 0 ORDER BY tspi_country.NameDE";

                              $res=send_sql($db,$sql);
                              $row=mysql_fetch_row($res);

                              echo 
                              "<table width='100%' border='1'><tr><td width='120'>Land</td><td width='100'>Nachname</td><td width='100'>Vorauskasse</td><td width='100'>Kreditkarte</td></tr></table>";

                                      
                              $tmpvorkasse 0;
                              $tmpnachname 0;
                              $tmpkreditkarte 0;

                               while(
                              $row mysql_fetch_array($res)) {
                               

                              $landname $row[0];
                              $versandname $row[1];
                              $nachname $row[2];
                              $vorauskasse $row[3];
                              $kreditkarte $row[4];
                              $versand_type $row[5];
                              $gebuehr $row[6];

                                  if (
                              $nachname == &&  $vorauskasse == &&  $kreditkarte == 0){
                                      }else{
                                      
                                  if (
                              $nachname == 1){
                                      
                              $nachname "<img src='../img/ja.jpg'>";
                                  
                                      }
                                  else  if(
                              $nachname == 0){ 
                                       
                              $nachname "<img src='../img/nein.jpg'>";
                                      
                                       }
                                  if (
                              $vorauskasse == 1){
                                      
                              $vorauskasse "<img src='../img/ja.jpg'>";
                                      
                                      }
                                  else  if(
                              $vorauskasse == 0){ 
                                       
                              $vorauskasse "<img src='../img/nein.jpg'>";
                                      
                                       }
                                  if (
                              $kreditkarte == 1){
                                      
                              $kreditkarte "<img src='../img/ja.jpg'>";
                                      
                                      }
                                  else  if(
                              $kreditkarte == 0){ 
                                       
                              $kreditkarte "<img src='../img/nein.jpg'>";
                                      
                                       }
                                      


                              if (
                              $landname $tmplandname && isset($tmplandname))
                              {
                                  if(
                              $vorauskasse == 1)
                                      {
                              $tmpvorkasse=$vorauskasse;}
                                      else{
                              $tmpvorkasse=$tmpvorkasse;}

                                  if(
                              $nachname == 1)
                                      {
                              $tmpnachname=$nachname;}
                                      else{
                              $tmpnachname=$tmpnachname;}

                                  if(
                              $kreditkarte == 1)
                                      {
                              $tmpkreditkarte=$kreditkarte;}
                                      else{
                              $tmpkreditkarte=$tmpkreditkarte;}
                              }
                              else {echo 
                              "<table width='100%' border='1'><tr><td width='120'>";
                                      
                                      echo 
                              $tmplandname;
                                      echo 
                              "</td><td width='100'>".$tmpnachname."</td><td width='100'>".$tmpvorkasse."</td><td width='100'>".$tmpkreditkarte."<br />\n</td></tr></table>";

                                      
                              $tmplandname $landname;
                                      
                              $tmpvorkasse $vorauskasse;
                                      
                              $tmpnachname $nachname;
                                      
                              $tmpkreditkarte $kreditkarte;
                              }}}
                                  
                              ?>
                              Hat da jemand noch Ideen, Vorschläge oder sogar die Lösung....!?

                              Kommentar

                              Lädt...
                              X