[SQL allgemein] Zusammengefasste Queries - in SQL ja, in PHP nein

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

  • [SQL allgemein] Zusammengefasste Queries - in SQL ja, in PHP nein

    Hallo!

    Um Leistung zu sparen habe ich aktuell eine Optimierung meiner Scripte in Angriff genommen, konkret geht es mir vorläufig um Zusammenfassen vo Queries.

    Ein mit PHP zu einer Abfrage generiertes Query sieht z.B. so aus:

    PHP-Code:
    UPDATE `tableSET `column1`="text1" WHERE `column2`="xyz";
    UPDATE `tableSET `column2`="text2" WHERE `column2`="abc"
    Die Sache ist nun die - in PHP verursacht das Ding Fehlermeldungen, in PHPMyAdmin kann ich die Queries jedoch ohne Probleme ausführen!

    Die Fehlermeldung in PHP lautet: 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 ';INSERT INTO `table_x` (`column_a`,`column_b`,`column_c`,' at line 32

    Also ich werde aus dieser Meldung nicht schlau, und schon garnicht aus dem merkwürdigen Verhalten was ich oben beschrieben habe. Wäre nett wenn mir jemand einen Denkanstoß verpassen könnte.

  • #2
    Re: [SQL allgemein] Zusammengefasste Queries - in SQL ja, in PHP nein

    Eine Fehlermeldung, die sich auf ";INSERT ..." bezieht, kann wohl kaum von deinen UPDATE-Queries herstammen - vielleicht schaust du erst mal in der richtigen Zeile nach ...?

    Und dann informierst du dich vielleicht noch mal, wie viele Queries man über die benutzte API-Funktion auf einmal absetzen kann.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Stimmt, da ist mir ein Fehler unterlaufen, allerdings ändert das nichts an der Tatsache dass es grundsätzlich nicht geht. Auch das Update-Query funktioniert nicht.

      Hier nochmal eine Vereinfachung des Insert-parts:

      PHP-Code:
      INSERT INTO `table` (`column_a`,`column_b`) VALUES ("abc","def");
      INSERT INTO `table` (`column_a`,`column_b`) VALUES ("ghi","jkl"); 

      Kommentar


      • #4
        Ja, fein - offenbar hast du jetzt bereits ca. die Hälfte der Antwort zur Kenntnis genommen.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Wieviel Queries ich absetzen kann habe ich nicht gefunden, aber zu Testzwecken sind es 2, daran solls nicht scheitern.

          Kommentar


          • #6
            Original geschrieben von Gpunkt
            Wieviel Queries ich absetzen kann habe ich nicht gefunden, aber zu Testzwecken sind es 2, daran solls nicht scheitern.
            du möchtest hier nochmal lesen: http://de3.php.net/manual/de/function.mysql-query.php
            Kissolino.com

            Kommentar


            • #7
              Es ist also so, dass wirklich nur 1 Query möglich ist.

              Was mich wundert - wie kommt dieser Typ dann auf folgenden Tip:

              "Auch häufig falsch gemacht: INSERT, UPDATE und DELETE Befehle werden nicht zusammengefasst, um alles auf einmal mit einem Query ausführen. Stattdessen wird jedes einzelne SQL-Query auch einzeln an die Datenbank gesendet. Das kostet sehr viel Laufzeit.
              In der ersten Schleife werden 100 SQL-Querys gemacht. In der zweiten Schleife wird 100 mal in einen String geschrieben und 1 Query abgesetzt. Jeder kann sich denken was schneller ist. Das trifft übrigens auf den INSERT Befehl, genau wie auch auf die Befehle UPDATE und DELETE zu. Es macht also Sinn für eine Software einen I/U/D-SQL Befehlspuffer aufzubauen. Gerade bei umfangreichen Anwendungen kann mit einem Klick doch recht intensiv auf die Datenbank zugegriffen werden, da lohnt sich eine fest implementierte Funktion für diese Dinge."

              Kommentar


              • #8
                Original geschrieben von Gpunkt
                Was mich wundert - wie kommt dieser Typ dann auf folgenden Tip:
                keine ahnung. frag ihn ... vielleicht macht er es (in seiner db-klasse) wie phpMyAdmin. afaik splittet pma die queries am semikolon und setzt die einzel-queries in einer schleife ab.

                wenn du inserts auf EINE tabelle zusammenfassen willst, kannst du das so aufbauen:
                Code:
                INSERT INTO 
                    tabelle (s1, s2, s3, ...) 
                VALUES 
                    (v1, v2, v3, ...), 
                    (v1a, v2a, v3a, ...), 
                    (v1b, v2b, v3b, ...), 
                ...
                deletes und updates auf mehrere datensätze lassen sich mit WHERE IN () zusammenfassen, wenn man will/kann.
                Kissolino.com

                Kommentar


                • #9
                  Danke, die Möglichkeit hab ich noch garnicht in Erwägung gezogen.

                  Die Sache mit dem Aufsplitten macht ja wenig Sinn - da ist eine bereits vorhandene Schleife schneller.

                  Kommentar

                  Lädt...
                  X