Ankündigung

Einklappen
Keine Ankündigung bisher.

mysqli_fetch_array oder mysqli_fetch_all - ich weiß nicht weiter...

Einklappen

Neue Werbung 2019

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

  • mysqli_fetch_array oder mysqli_fetch_all - ich weiß nicht weiter...

    Ich benötige für eine Funktion aus dieser Tabelle einen Array nach dem unten stehenden Muster

    tabelle.PNG


    PHP-Code:
    $allDescriptions = array(
    =>'Auto',
    =>'Baum',
    =>'Haus',
    4=>'Boot',
    5=>'Drachen',
    6=>'Schule',
    7=>'Teil',
    8=>'Maske',
    9=>'Edding'
    ); 
    ich habe alles schon versucht, aber bekomme mit print_r($array); leider wenn dann nur ein sehr verschachteltest array zurück, mit dem ich so leider nichts anfangen kann.

    PHP-Code:
    $sql "SELECT * FROM aufnahmebereiche ORDER BY id ASC";
                
    $result $db_pre->query($sql) OR die(mysqli_error());
                
    $rows = array();
                while(
    $row $result->fetch_array()) {
                
    $rows[] = $row;
                    }
                
    print_r($rows); 
    ergibt dann:

    Code:
    Array ( [0] => Array ( [0] => 1 [id] => 1 [1] => Akt [bezeichnung] => Akt ) [1] => Array ( [0] => 2 [id] => 2 [1] => Teilakt [bezeichnung] => Teilakt ) [2] => Array ( [0] => 3 [id] => 3 [1] => Bademode [bezeichnung] => Bademode ) [3] => Array ( [0] => 4 [id] => 4 [1] => Fetisch [bezeichnung] => Fetisch ) [4] => Array ( [0] => 5 [id] => 5 [1] => Bodypainting [bezeichnung] => Bodypainting ) [5] => Array ( [0] => 6 [id] => 6 [1] => Portrait [bezeichnung] => Portrait ) [6] => Array ( [0] => 7 [id] => 7 [1] => Fashion [bezeichnung] => Fashion ) [7] => Array ( [0] => 8 [id] => 8 [1] => verdeckter Akt [bezeichnung] => verdeckter Akt ) [8] => Array ( [0] => 9 [id] => 9 [1] => verdeckter Teilakt [bezeichnung] => verdeckter Teilakt ) [9] => Array ( [0] => 10 [id] => 10 [1] => Tanz [bezeichnung] => Tanz ) [10] => Array ( [0] => 11 [id] => 11 [1] => Laufsteg [bezeichnung] => Laufsteg ) [11] => Array ( [0] => 12 [id] => 12 [1] => Lifestyle [bezeichnung] => Lifestyle ) [12] => Array ( [0] => 14 [id] => 14 [1] => Fernsehen [bezeichnung] => Fernsehen ) [13] => Array ( [0] => 15 [id] => 15 [1] => Dessous [bezeichnung] => Dessous ) [14] => Array ( [0] => 16 [id] => 16 [1] => Theater [bezeichnung] => Theater ) [15] => Array ( [0] => 17 [id] => 17 [1] => Promotion [bezeichnung] => Promotion ) [16] => Array ( [0] => 18 [id] => 18 [1] => Kommerziell [bezeichnung] => Kommerziell ) )

    da mit der Kopf mächtig raucht und ich leider auf Grund fehlender Kenntnisse keine Idee dazu habe, bitte ich demütig um Hilfe.

  • #2
    Wir haben dir doch alles schon im anderen Faden erklärt, warum fängst du immer mit den gleichen Fehlern an
    SELECT *
    glaubst du denn da macht es Spass dir zu helfen, bei soviel Ignoranz.

    Lies da noch mal die Links durch die dir zum Thema DB und JOIN gegeben wurden und vergiss den Rest der sogenannten schlauen Alternativen.
    Hier noch ein Link zum Thema.

    Kommentar


    • #3
      Soweit ich weiß kann mysqli das nicht. D.h. du musst musst dir das Array selbst basteln oder PDO nehmen, da sollte fetchAll(PDO::FETCH_KEY_PAIR); genau das erledigen was du haben möchtest.
      Anbei Select * solltest du vermeiden, das machts dir und anderen nur unnötig schwer.
      Selber basteln sollte jetzt aber auch nicht allzu schwer sein:
      PHP-Code:
      <?php
      //hier getippt, d.h. ungetestet, das Prinzip sollte aber klar werden.
      $rows = []
      foreach(
      $result->fetch_all() as $row) {
          
      $rows[$row['id']] = $row['bezeichnung'];
      }

      Kommentar


      • #4
        ChromOxid
        Dein Ansinnen mag löblich sein, aber es geht hier um defektes Datenbankdesign. Das wird auch nicht mit irgendwelchen Kniffen besser.
        Lies einfach mal die Einleitung im anderen Thread von ihm.

        Kommentar


        • #5
          Zitat von protestix Beitrag anzeigen
          Wir haben dir doch alles schon im anderen Faden erklärt, warum fängst du immer mit den gleichen Fehlern an
          SELECT *
          glaubst du denn da macht es Spass dir zu helfen, bei soviel Ignoranz.

          Lies da noch mal die Links durch die dir zum Thema DB und JOIN gegeben wurden und vergiss den Rest der sogenannten schlauen Alternativen.
          Hier noch ein Link zum Thema.
          es ist wirklich nett, das du hilfst. leider ist diese Art von Hilfe für mein "Problem" aber gerade nicht sonderlich zielführend.

          Ich möchte lediglich wissen, wie ich aus der oben genannten Tabelle die ID zum Wert in ein Array nach dem oben genannten Muster verpacken kann. Nicht mehr und nicht weniger.
          In einer sog. PDO Funktion scheint es das ja zu geben; mit mysqli auch, nur leider weiß ICH nicht, wie ich diese nutzen kann - Mangel an Erfahrung würd eich sagen.
          Ja, ich bin des googelns mächtig und habe heute den kompletten Nachmittag damit verbracht mir Dinge dazu durchzulesen - leider nichts gefunden oder verstanden, was mit hilft.

          Das es dir nun nicht beliebt, das ich erneut mit SELECT * anfange, ist ok. Dann denk dir bitte einfach den Teil, das dort steht SELECT id, bezeichnung...
          Mit der JOIN Funktion bin ich - so habe ich es verstanden - darauf angewiesen, das ich eine Tabelle anlege, die ich nicht benötige - weder technisch noch logisch. Das hat für mich auch nichts mehr mit Normalisierung zu tun.
          Eine Tabelle anzulegen in der mehrere tausend oder Millionen Datensätze stehen, wenn ich die gleichen Informationen als String zum User speichern kann, mit max 18 kelinen Zahlen... ich weiß nicht was da nun schlauer sein soll.
          Sollte es da einen anderen Weg geben die Funktion JOIN zu nutzen, mit meiner vorhanden Struktur, dann tut es mir leid, muss ich dir sagen, das ich es nicht verstanden habe - das kommt vor. Gerne kann man das nochmal vertiefen. Ich habe ja keine Probleme damit, zu zugeben, das ich was PHP und MySQL angeht, einfach noch sehr unerfahren bin.

          Ist eigentlich auch egal....

          Was ich als "Lösung" bevorzuge, habe ich erfragt. Ein technisch nicht machbar, wurde mir zum Glück nicht genannt.

          Das es DIR nun nicht beliebt, wie ich es gerne lösen möchte, spielt für mich aber keine Rolle.
          Und bitte entgegne mir nun nicht mit Worten wie: "Dann darf man auch keine Hilfe einfordern" "Bezahle jemanden, damit er dir das macht", "Lerne es doch gleich von Anfang an richtig"
          Das bringt mich nicht zu der Lösung, die meines Erachtens nach, durchaus in dem Rahmen, in dem ich es nutzen möchte, mit den mit vorliegenden "Gegebenheiten" umsetzten kann.

          Alles andere hat mit dem HIER angesprochenen Problem leider sonst gar nichts zu tun.

          Kommentar


          • #6
            Zitat von protestix Beitrag anzeigen
            ChromOxid
            Dein Ansinnen mag löblich sein, aber es geht hier um defektes Datenbankdesign. Das wird auch nicht mit irgendwelchen Kniffen besser.
            Lies einfach mal die Einleitung im anderen Thread von ihm.
            ich kann beim besten Willen nicht nachvollziehen, wie du beurteilen kannst, das mein Datenbankdesign defekt ist?
            Nur weil ich auf einen Zug der penetranten Normalisierung nicht aufspringen möchte und muss?

            Sorry, aber ich fände es voll in Ordnung, wenn du dich aus dem weiteren Verlauf der Lösungssuche zurückziehen würdest.

            Dennoch danke, für das was du beigetragen hast.

            Kommentar


            • #7
              Eine Tabelle anzulegen in der mehrere tausend oder Millionen Datensätze stehen, wenn ich die gleichen Informationen als String zum User speichern kann, mit max 18 kelinen Zahlen... ich weiß nicht was da nun schlauer sein soll.
              Ein typisches Problem was du dadurch erzeugst siehst du hier. Ja eine normalisierte Datenbank enthält mehr Datensätze, schadet das? Nein. Die enthaltenen Daten bleiben gleich, du speicherst weiterhin genauso die Zahlen, eine n:m Beziehung ist nichts unübliches. Ein langer String mit den einzelnen Daten (id's) drin hingegen bereitet dir unzählige Probleme. Ein Beispiel siehst du gerade hier (bzw. in deinem anderen Thread). Ein weiteres wäre, wenn dich irgendwann mal interessiert wie oft Kategorie 6 in deiner Datenbank vorkommt. In einer normalisierten Datenbank dauert sowohl das Abfrage schreiben als auch das ausführen eine sehr überschaubare Zeit. In deinem Fall werden beide Tätigkeiten deutlich länger dauern. Je nach Menge der Datensätze kommst du bei deiner Variante sicher schnell in den Sekundenbereich, der für den Benutzer deiner Seite schon ärgerlich spürbar ist.

              Nichts desto trotz hab ich dir in #2 eine Lösung für dein hier gezeigtes Problem präsentiert. Auf Dauer wirst du mit der "richtigen" Lösung sicher besser fahren.

              Kommentar


              • #8
                Für das Erzeugen eines eindimensionalen Key-Value Arrays aus einem zweidimensionalen Array wie es die Fetch-All-Methoden liefern hält PHP eine eigene Funktion bereit:
                array_column

                Ganz nützlich, wenn schon das Resultat einer Abfrage wie
                Code:
                SELECT id, group, description FROM ..
                schon vorliegt und ein solches Key-Value Array benötigt wird.
                PHP-Code:
                //SELECT id, group, description FROM ..
                $fetchAllResult = [
                  [
                'id' => '1''group' => '1''description' => 'Brot'],
                  [
                'id' => '4''group' => '1''description' => 'Kuchen'],
                ];

                $id_description_pairs array_column($fetchAllResult,'description','id');

                //test ausgabe
                debug::write($id_description_pairs);
                /*
                array (
                  1 => "Brot",
                  4 => "Kuchen",
                )
                */ 
                LG jspit

                Kommentar

                Lädt...
                X