Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Mysql - Query dynamisch erstellen - String zusammenfügen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Mysql - Query dynamisch erstellen - String zusammenfügen

    Hallo Leute!
    Ich beschäftige mich seit kurzem mit PHP und Mysql. Zu Übungs-und Lernzwecken habe ich eine kleine Website erstellt, die nur auf meinen Pc unter XAMPP 1.7.3 laufen soll und nie ins Web gestellt wird. Daher auch das "SELECT *".

    Mein Ziel:
    Aus einer Datenbank sollen Tabellen (idente Struktur) ausgelesen und in einer gemeinsamen HTML-Tabelle dargestellt werden.
    Mein Code für die Abfrage sieht so aus:
    PHP-Code:
    $sql="(SELECT * from austria WHERE stern=$stern AND richtung='$L_S')
            UNION (SELECT * from dax_1 WHERE stern=
    $stern  AND richtung='$L_S')
            UNION (SELECT * from dax_2 WHERE stern=
    $stern  AND richtung='$L_S')
            UNION (SELECT * from finnland WHERE stern=
    $stern  AND richtung='$L_S')
            UNION (SELECT * from spanien WHERE stern=
    $stern  AND richtung='$L_S')
            UNION (SELECT * from frankreich_1 WHERE stern=
    $stern AND richtung='$L_S')";
    //------------------------------------------------------------------------------------------*/
    //--------DATENBANKABFRAGE-Ausgabe------------------        
    $result=mysql_query($sql);
    echo 
    "<br><b>error meldung von DATENBANKABRFAGE(Ausgabe):</b><br> ";
    print 
    mysql_error(); 
    Das funktioniert auch.
    Da noch neue Tabellen hinzukommen werden, möchte ich den Abfragestring dynamisch erstellen.
    Dazu lasse ich mir die Namen der Tabellen ausgeben und versuche, die Abfrage mit folgendem Code hinzubekommen:

    PHP-Code:
    $htp ="SHOW TABLES FROM $datenbank";
    $namen=mysql_query($htp);
    print 
    mysql_error();
    //------------Array aus den Tabellennamen erstellen
    $tabelle=array();
    while (
    $row mysql_fetch_row($namen)) {
        
    array_push($tabelle,$row);
        }
    //-----------Array mit UNION Strings erstellen
    for($i=1$i <count($tabelle); $i++)
        {
        
    $hallo[]= "UNION (SELECT * FROM " .$tabelle[$i][0]." WHERE stern=$stern AND richtung='$L_S')<br>";
        }
    $test_sql=implode($hallo);
    //---------------Abfrage zusammenstöpseln
    $sql_1="(SELECT * from austria WHERE stern=$stern AND richtung='$L_S')";
    $sql_2"\"".$sql_1.$test_sql."\"";

    //--------DATENBANKABFRAGE-Ausgabe------------------        
    $result=mysql_query($sql_2);
    echo 
    "<br><b>error meldung von DATENBANKABRFAGE(Ausgabe):</b><br> ";
    print 
    mysql_error(); 
    Mein Problem:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"(SELECT * from austria WHERE stern=3 AND richtung='L')UNION (SELECT * FROM daen' at line 1

    Der String schaut mit echo ausgegeben für mich richtig aus:
    PHP-Code:
    "(SELECT * from austria WHERE stern=3 AND richtung='L')UNION (SELECT * FROM daenemark WHERE stern=3 AND richtung='L')
    UNION (SELECT * FROM dax_1 WHERE stern=3 AND richtung='L')
    UNION (SELECT * FROM dax_2 WHERE stern=3 AND richtung='L')
    UNION (SELECT * FROM finnland WHERE stern=3 AND richtung='L')
    UNION (SELECT * FROM frankreich_1 WHERE stern=3 AND richtung='L')
    UNION (SELECT * FROM frankreich_2 WHERE stern=3 AND richtung='L')
    UNION (SELECT * FROM holland WHERE stern=3 AND richtung='L')
    UNION (SELECT * FROM spanien WHERE stern=3 AND richtung='L')

    Bin momentan ratlos. Für Tipps wäre ich sehr dankbar. Merci im voraus

  • #2
    Schon zig Tabellen mit identischer Struktur sind ein grober Fehler, den du beseitigen solltest.

    Faustregel: Daten gleicher Struktur kommen auch in eine Tabelle.

    Wenn du darin Daten aus unterschiedlichen Ländern ablegen willst - dann kommt in eine weitere Spalte ein entsprechendes Kennzeichen bzw. eine Länder-ID.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      echo $sql gibt wirklich die Doppelhochkommas aus?

      Spontan stellt sich die Frage, warum du für die Länder separate Tabellen verwaltest, wenn diese doch gleich aufgebaut sind. Man könnte das ja auch alles mit einer einzigen Tabelle hinkriegen, wobei noch ein Länderkürzel mitgespeichert werden muss.

      (Ich tippe zu langsam...)
      [PHP]if ($var != 0) {
      $var = 0;
      }[/PHP]

      Kommentar


      • #4
        Danke für die schnelle antwort.
        Jup hast recht. 1 Tabelle würde das problem gleich obsolet machen. Ich hab die Tabellen einfach aus Excel übernommen und mir keine weiteren Gedanken darüber gemacht. Wieder was gelernt

        Nur zum Verständnis: Wo liegt den der Fehler in dem String??

        Kommentar


        • #5
          @Wolla

          Ja. Das ist direkt per Copy&Paste von der Ausgabe eingefügt.

          PHP-Code:
          $sql_2"\"".$sql_1.$test_sql."\""
          Sehe schon, dass ich mich grundlegend mit Datenbankstrukturen auseinandersetzen muss.

          Kommentar


          • #6
            Was hast du mit den Anführungszeichen vor?
            Code:
            "\""
            Bitte lesen: http://de.wikipedia.org/wiki/Normali...28Datenbank%29
            [URL]http://hallophp.de[/URL]

            Kommentar


            • #7
              $result=mysql_query($sql_1);

              (Das nochmal in Hochkommas einpacken muss man nicht. Da hast du was falsch verstanden.)

              Mach eine einzige Tabelle draus, dann brauchts auch keine Unions und Show_Tables.
              [PHP]if ($var != 0) {
              $var = 0;
              }[/PHP]

              Kommentar


              • #8
                @Asipak

                Meine Idee dabei war in der Variable $sql_2 einen String zu erzeugen, der genauso aussieht wie der aus der händisch erstellten Variable $sql:
                PHP-Code:
                $sql="(SELECT * from austria WHERE stern=$stern AND richtung='$L_S')UNION (SELECT * from dax_1 WHERE stern=$stern  AND richtung='$L_S')
                        UNION (SELECT * from dax_2 WHERE stern=
                $stern  AND richtung='$L_S')
                        UNION (SELECT * from finnland WHERE stern=
                $stern  AND richtung='$L_S')
                        UNION (SELECT * from spanien WHERE stern=
                $stern  AND richtung='$L_S')
                        UNION (SELECT * from frankreich_1 WHERE stern=
                $stern AND richtung='$L_S')"
                danke für den link. Seh schon, ist ein weites Thema

                Kommentar


                • #9
                  @Wolla

                  Danke noch mal.
                  Jup, muss mir die Stringerstellung noch mal anschauen.
                  Werd beides probieren. Möchte rein zum lernen das mit dem String hinbekommen und werd dann die Datenbank umarbeiten.

                  Kommentar


                  • #10
                    Code:
                    $sql_2 = $sql_1 . $test_sql;
                    wäre korrekt.
                    [URL]http://hallophp.de[/URL]

                    Kommentar


                    • #11
                      @Asipak

                      Danke. Hab ich schon ausprobiert. Die Fehlermeldung ist leider immer noch da.
                      allerdings leicht verändert:
                      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
                      UNION (SELECT * FROM dax_1 WHERE stern=3 AND richtung='S')
                      UNION (SELECT ' at line 1


                      werd mal browser cache löschen

                      Kommentar


                      • #12
                        Manchmal sind Leerzeichen durchaus nützlich.
                        [PHP]if ($var != 0) {
                        $var = 0;
                        }[/PHP]

                        Kommentar


                        • #13
                          @Wolla

                          leerzeichen? ok! danke für den tipp. werd ich mir noch mal anschauen. hab die datenbank inzwischen umgebaut und die sache funktioniert jetzt viel einfacher #danke noch mal

                          Kommentar

                          Lädt...
                          X