Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP/MYSQL Abfrage, bereinigte Ausgabe

Einklappen

Neue Werbung 2019

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

  • PHP/MYSQL Abfrage, bereinigte Ausgabe

    Liebe Freunde der PHP-Progammierung

    Ich bin sehr neu was PHP-Programmierung angeht. Ich bin recht bewant in der VBA-Programmierung und habe gedacht ich versuchs jetzt mal mit PHP.
    Ich habe mir diverse Bücher gekauft und die meisten Dinge klappen schon recht gut. Jetzt habe ich mit einem Projekt begonnen und bin auf Schwirigkeiten gestossen.
    Leider geht es um grundlegende Verstädnisfragen, die ich aber trotz lesen und probieren mir selber nicht erklären konnte. Konkret:

    Ich habe mir eine MySQL Datenbank erstellt. Diese ist simpel gemacht. Es gibt eine Kolonne "first_name", eine Kolonne "last_name" und eine Kolonne "ranking" (heisst bei mir 3y_al_vs_in, weil es ein 3 jahres ranking ist).
    Die Verbindung zur DB klappt problemlos.
    Ich mache dann die Abfrage:

    PHP-Code:
    $ergebnis $mysqli->query("SELECT first_name, last_name, raking from `overview` Order By CAST(3y_al_vs_in AS SIGNED) DESC;");
    while(
    $zeile $ergebnis->fetch_assoc()) {

    Wenn ich das ganz über: echo "<tr><td>" . htmlspecialchars($zeile["last_name"]) . "</td>" . "<td>" . htmlspecialchars($zeile["first_name"]) . "</td>" . "<td>" . htmlspecialchars($zeile["3y_al_vs_in"]) . "</td>" . "</tr>\n"; aufrufe, klappt das tip top. Er spuckt mir alle Werte aus. Leider sind einige Namen doppelt vertreten, weisen aber dasselbe Ranking auf. Das heisst ich brauche diese nur einmal. Habe ich dann gelöst mit:

    PHP-Code:
    $ergebnis $mysqli->query("SELECT first_name, last_name, raking from `overview` Order By CAST(3y_al_vs_in AS SIGNED) DESC;");
    while(
    $zeile $ergebnis->fetch_assoc()) {
    }
    $array[] = $zeile["last_name"] ." " $zeile["first_name"] ." " $zeile["3y_al_vs_in"]; 
    und da ich gelesen hatte, dass ich eine foreach schleife verwenden muss, wenn Lücken im Array bestehen:
    PHP-Code:
    $regex "/NC/";
    foreach (
    $arrayneu as $key => $value) {
    if(!
    preg_match($regex$value)) {
    echo 
    "<tr><td>" .$value"</td>" "</tr>\n";
    }

    Soweit klappt alles.

    Was mit am ganzen gar nicht gefiel ist, dass ich einen zusammenhängen String mit: $array[] = $zeile["last_name"] ." " . $zeile["first_name"] ." " . $zeile["3y_al_vs_in"]; erzeugt habe. mit first_name, last_name ist das ja noch ok aber das Ranking wollte ich in eine separaten Spalte. Ich habe dann folgendes versucht (noch ohne array_unique, da ich testen wollte was dabei rauskommt):

    PHP-Code:
    while($zeile $ergebnis->fetch_assoc()) {
    $array = array("last_name" => $zeile["last_name"], "first_name" => $zeile["first_name"], "3y_al_vs_in" => $zeile["3y_al_vs_in"]);
    }
    $arrayneu array_unique($array);
    print_r ($arrayneu); 
    und nun zeigt er mir gerade nur einen Datensatz an und zwar spielt es keine Rolle ob ich print_r durch ein foreach Schleife ersetze. Warum?
    Ganz generell würde ich die Endausgabe sowieso lieber mit while machen, da ich da die einzelnen Spalten ansteuern kann. Dafür müsste ich vermutlich erst ein neues array mit der foreach schleife befüllen und dann würde die Indexierung wieder stimmten, oder?

    Also, was ich ganz gerne wissen möchte, wenn sich den jemdand die Zeit nimmt und das liest und sich auch noch die Mühe für eine Antwort macht:

    Wie kriege ich aus einer Datenbank ein assoziatives Array, dass man von Doppeineinträgen bereinigen kann und danach trotzdem alle Spalten ("first_name", "last_name") separat ausgeben kann.

    Ich wäre um Hilfe und auch Ratschläge sehr dankbar.

    Liebe Grüsse

    Stefan

  • #2
    Stichwort distinct, siehe https://dev.mysql.com/doc/refman/5.0...imization.html

    Kommentar


    • #3
      ok, das schaue ich mir nacher gerne mal durch. was ist an

      PHP-Code:
      $ergebnis $mysqli->query("SELECT first_name, last_name, raking from `overview` Order By CAST(3y_al_vs_in AS SIGNED) DESC;");
      while(
      $zeile $ergebnis->fetch_assoc()) {
      }
      $array[] = $zeile["last_name"] ." " $zeile["first_name"] ." " $zeile["3y_al_vs_in"]; 
      so falsch? warum krieg ich mit einer schleife nur ein Resultat?

      Danke & Gruss
      Stef

      Kommentar


      • #4
        Du füllst das Array nicht innerhalb der Schleife sondern erst nach der Schleife, du schiebst also die Werte der letzten Iteration ins Array.

        Kommentar


        • #5
          Ok, sorry habs falsch kopiert. ich habs innerhalb der Schleife. geht aber nicht:

          PHP-Code:
          while($zeile $ergebnis->fetch_assoc()) {
          $array = array("last_name" => $zeile["last_name"], "first_name" => $zeile["first_name"], "3y_al_vs_in" => $zeile["3y_al_vs_in"]);
          }
          foreach(
          $array as $arrayneu){
          echo 
          $arrayneu;

          Kommentar


          • #6
            ändert aber nichts. kommt nur 1 Ergebnis zurück.

            Kommentar


            • #7
              Weil du da nur die Variable $array befüllst.
              PHP-Code:
              while($zeile $ergebnis->fetch_assoc()) {
              $array[] = array("last_name" => $zeile["last_name"], "first_name" => $zeile["first_name"], "3y_al_vs_in" => $zeile["3y_al_vs_in"]);

              Kommentar


              • #8
                Guten Morgen zusammen
                uha, vielen Dank. Distinct ist ja voll einfach und funzt! Super Lösung danke!
                Hab alles hinbenkommen. Ebenfalls an Vph danke für die Hilfen.

                Hab trotzdem noch eine grundsätzliche Frage zu den Arrays.
                Warum ist den das Array bei der while abfrage (bei mir
                PHP-Code:
                while($zeile $ergebnis->fetch_assoc()) 
                ) nur innerhalb der While Schleife verfügbar?
                Also $zeile muss doch nach der while schleife alle meine Daten enthalten?
                Und wie befüllt man ein Array von einer MySQL DB so dass die Werte danach irgendwo im Code mit einer Schleife (for, foreach oder was auch immer) ausgegeben werden können?
                Naja für euch mögen diese Fragen etwas selsam klingen bei VBA läuft das halt alles etwas anders mit den Arrays. Möchte nur verstehen wie das genau funzt.

                Nochmals vielen Dank an alle und Grüsse

                Stef

                Kommentar


                • #9
                  Das liegt daran das $zeile kein mehrdimensionales Array ist. Es ist ein Datensatz der in jedem Schleifendurchlauf durch den jeweils neuen Datensatz aus der DB überschrieben wird.

                  Kommentar

                  Lädt...
                  X