Ankündigung

Einklappen
Keine Ankündigung bisher.

CSV Export Script... Vermutlich Loop problem

Einklappen

Neue Werbung 2019

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

  • CSV Export Script... Vermutlich Loop problem

    Hallo erstmal!
    Bin noch recht am Anfang was meine php Kentnisse anbelangt und muss mich nun mit folgendem Problem beschäftigen:
    Ich baue einen CSV Export für Userdaten.

    Die Datenbanken sind wie folgt aufgebaut:

    User
    Userdaten, Agenturnummer

    Agenturen
    Agenturnummer, BZN

    Regionen
    BZN, Regionsname


    Jetzt möchte ich sämtliche User einer Region ausgeben lassen. D.h. ich muss über 2 Ecken gucken, in welcher Region der User ist (Agenturnummer->BZN->Region). Nachfolgendes Script, spuckt mit die Agenturen einer Region aus. Wie kann ich jetzt einen Loop innerhalb dieser Agenturen erzeugen, sodass alle User einer Agentur ausgegeben werden und nicht nur einer?!

    Hier der Code:


    PHP-Code:
    $sql "SELECT * FROM `tx_ervagenturen_domain_model_agenturen` WHERE bzn = $region";
    $result mysql_query($sql);
            
    # Beginne Teilnehmer-Abarbeitung
    while($agentur mysql_fetch_array($resultMYSQL_ASSOC))
    {
        
    $query "SELECT * FROM  `fe_users` WHERE `company`=".$agentur[agenturnummer]. " LIMIT 1";
        
    $users mysql_query($query);
        
    $row mysql_fetch_array($usersMYSQL_ASSOC);

        
    # Beginne Produkt-Abarbeitung
        
    $query "SELECT * FROM  `tx_ervagenturen_domain_model_regionen` WHERE `bzn`=".$agentur[bzn];
        
    $regionen mysql_query($query);
        
    $region mysql_fetch_array($regionenMYSQL_ASSOC);

        
    $list[] = array


    Wäre mega wenn ihr mir helfen könntet!

  • #2
    Nur kurze Verständnisfrage: Warum löst du das nicht per JOINS o. Ä., wenn du vernünftige Fremdschlüssel hast?

    Kommentar


    • #3
      Vermutlich weil ich davon jetzt zum ersten mal höre

      Ich kann die Datenbankstruktur nicht verändern, falls das darauf abzielt?!


      //Edit: Versuche mich da einzulesen aber ich fürchte das braucht leider etwas viel Zeit bis ich das richtig verstanden habe. Die habe ich leider nicht, nur noch heute abend :/
      Ist es Dir möglich mir anhand des gelieferten Codes ein Beispiel zu schreiben? Wäre Dir sehr dankbar!

      Kommentar


      • #4
        Müsste ungefähr so gehen:
        PHP-Code:
        "SELECT * 
        FROM `tx_ervagenturen_domain_model_agenturen` dma
        JOIN `fe_users` u ON (u.`company`= dma.`agenturnummer`)
        JOIN `tx_ervagenturen_domain_model_regionen` dmr ON (dmr.`bzn` = dma.`bzn`)
        WHERE bzn = 
        $region
        Wiso fragste denn so kurzfristig?

        Kommentar


        • #5
          Ja sauber, vielen Dank!

          ...mein Programmier für nen Kunden macht mal wieder siesta und dann muss ich das selbst machen :P

          Kommentar


          • #6
            Die älteste der drei mysql-Erweiterungen ist veraltet (mysql_*-Funktionen, nicht die MySQL-Datenbank) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
            Choosing an API
            Warum man mysql* generell nicht (mehr) nutzen sollte.
            Wie man von mysql* auf PDO umsteigt
            Wissenswertes zum Thema SQL-Injection

            Die Verwendung von "*" in SQL-Abfragen wird im Allgemeinen als schlechter Stil angesehen. "*" kann entweder alle Felder aus einer Tabelle, oder (wenn mehrere Tabellen mit einbezogen werden) aus allen Tabellen ziehen.

            Zwei Gründe sprechen dagegen: Wenn du dein Tabellenschema anpasst, wird die Abfrage weiterhin funktionieren. Die Abfrage wird in deinem Code aber Variablen (bzw. Array-Keys) erzeugen, die von deinem Programm so nicht erwartet werden. Das kann (je nachdem, wie deine Applikation aufgebaut ist) zu schwer nachvollziehbaren Problemen führen. Würdest du die Spaltennamen direkt in deiner SQL-Abfrage angeben, würde die SQL-Abfrage direkt lautstark fehlschlagen. Dann kannst du möglicherweise einen Alias für umbenannte Tabellenspalten angeben, ohne dass du deinen Applikationscode anpassen musst.

            Außerdem kann man durch eine explizite Angabe die Reihenfolge und die Anzahl der Tabellenspalten begrenzen. Die Reihenfolge kann je nach Applikation eine Rollen spielen und je weniger Felder man einbezieht, desto schneller wird das Ergebnis zum abfragenden Client übertragen.

            Kommentar


            • #7
              Danke für die Info. Allerdings kann ich dem nur schwer glauben schenken, da fast niemand auf die neue PHP Version umsteigen würde, wenn nichts mehr liefe. Fast alle Seiten die ich zu Gesicht bekomme arbeiten noch mit dem *.

              Dennoch, für zukünftige Projekte werde ich darauf achten, danke!

              Kommentar


              • #8
                Oh, das sind eigentlich zwei Artikel, die getrennt voneinander betrachtet werden sollen. Die alte mysql_-Erweiterung (mysql_connect, mysql_query, mysql_...) wird es bald nicht mehr geben.

                SELECT * FROM ist eher ein CodeSmell. Das heisst, dass du bis auf absehbare Zeit noch SELECT * FROM verwenden kannst . Davor brauchst du keine "Angst" zu haben. Ich wollte dich nur dafuer sensibilisieren, dass du durch das Auslesen aller Felder (*) theoretisch einige Fehler passieren koennen.

                Kommentar

                Lädt...
                X