#1 5. September 2007 servus, ich habe hier mehrere datensätze (zwischen 30 und x) mit id und 2 werten. in einem formular werden diese werte eingetragen und abgeschickt. sql-mäßig kommt sowas dabei raus: Code: UPDATE blubb SET wert1='". $muh ,"', wert2='". $meh ."' WHERE id='". $id ."' für jeden einzelnen datensatz ein update-statement zu bauen ist allerdings doof und unhübsch. gibt's 'ne möglichkeit, mehrere updates in einem mysql_query unterzubringen? + Multi-Zitat Zitieren
#2 5. September 2007 AW: SQL: mehrere updates in einem query Hi Boing, also du denkst dran wie doppelte Anführungszeichen in Kombination mit Variablen genutzt werden können? Machst dir mehr Arbeit als nötig und/oder arbeitest syntaktisch nicht korrekt! Zum Anderen möchte ich dir einfach nur einen Tipp geben, und zwar wäre das zum einen die MySQL Doku zu "UPDATE" und zum anderen gibt es dier Möglichkeit über phpmyadmin mehrere Datensätze zu bearbeiten und des zeigt dir danach den query an ... testen und selbst herausfinden + Multi-Zitat Zitieren
#3 5. September 2007 AW: SQL: mehrere updates in einem query alte angewohnheit seh da keine nachteile. hab ich da was übersehen? auf die idee kam ich auch schon, aber der versuch, die sql-statements per semikolon zu trennen, schlug fehl. + Multi-Zitat Zitieren
#4 5. September 2007 AW: SQL: mehrere updates in einem query Nein übersehen hast du bei der Doku effektiv nichts. EBEN In Verbindung mit der phpmyadmin Ausgabe, welche dir zwei durch ein Strichkomma getrennte Queries zeigt, hätte dir ja ein Lichtchen aufgehen können. Es gibt anscheinend keine Möglichkeit bei MySQL wie z.B. beim Insert Query mehrere "Queries" in einem zusammen zu fassen und da die mysql_query - Funktion anscheinend sowas auch nicht mag, musst du die Updates wohl leider seperat abschicken. Workarounds und Tipps zu sowas findeste aber auch z.B. unter php.net/mysql_query + Multi-Zitat Zitieren
#5 11. September 2007 AW: SQL: mehrere updates in einem query machst du noch ein hidden feld dazu oder so im formular und speicherst darin wert1 also den namen der zeile und speicherst das alles in ein array oder so und trägst dann den inhalt des arrays durch eine foreach schleife in die datenbank ein + Multi-Zitat Zitieren
#6 11. September 2007 AW: SQL: mehrere updates in einem query ich weiß nicht wies in mysql ist aber in oracle würde das ungefähr so aussehen: update ... set ... where id between 1 and 10 oder update ... set ... where id in (1, 2, 5, 27, 70) + Multi-Zitat Zitieren
#7 12. September 2007 AW: SQL: mehrere updates in einem query Du hast glaube ich die Frage nicht korrekt verstanden, denn deine Antwort beantwortet nicht im Ansatz die eindeutige Frage des Threaderstellers. @ndreisg ... dies ist nur einfache WHERE - Klausel und imho auch nicht wirklich die Antwort auf die Frage. + Multi-Zitat Zitieren
#8 12. September 2007 AW: SQL: mehrere updates in einem query eben ein wenig probiert, aber das wird auch nicht 100%ig das sein was du suchst. PHP: <? php $db -> query ( " UPDATE table1, table2 SET table1.feld2 = 'aa', table2.feld1 = 'bb' WHERE table1.feld1 = 1 AND table2.id = 2 " ); ?> vorher table1: Code: | feld1 | feld2 | -------------------------- | 1 | bbbbb | -------------------------- table2 Code: | id | feld2 | -------------------------- | 1 | asdf | -------------------------- | 2 | blub | -------------------------- nacher table1: Code: | feld1 | feld2 | -------------------------- | 1 | aa | -------------------------- table2: Code: | id | feld2 | -------------------------- | 1 | asdf | -------------------------- | 2 | bb | -------------------------- + Multi-Zitat Zitieren
#9 12. September 2007 AW: SQL: mehrere updates in einem query jetzt wo ich mal genauer darüber nachdenke.... hast du wohl recht sry aber ich denke b-xXx hat die richtige lösung nur das hidden feld wird wohl nicht nötig sein... die werte aus dem formular in arrays speichern diese arrays in einer for schleife durchlaufen und das update mit den entsprechenden werten ausführen... + Multi-Zitat Zitieren
#10 12. September 2007 AW: SQL: mehrere updates in einem query bxx hat imho noch weniger Recht oder zumindestens genauso viel Recht wie unseren lezten Postings, weil auch hier die direkte Frage des Threaderstellers nicht beantwortet wird. Murdoc...oder so. An Joins im Update-Query hab ich nicht gedacht. Damit wirste glaube ich die beste Möglichkeit getroffen haben wobei ich mich grad über meinen und boings pellkopf wundern muss wenn dass die beste lösung ist. Dein Beispiel ist ja quasi so auch in der Doku aufgeführt die ich Döspaddel oben ja auch schon angeführt habe. + Multi-Zitat Zitieren
#11 12. September 2007 AW: SQL: mehrere updates in einem query das ist zwar richtig! aber der Threadersteller hat auch geschrieben und mit for schleife wäre es nicht mehr so doof und unhübsch ^^ und nachdem man seine direkte frage wohl nicht beantworten kann, da das ganz einfach nicht möglich ist, ist es wohl naheliegend die beste alternative anzubieten mit einem join kann man übrigens nur mehrere tabellen gleichzeitig updaten aber man kann damit nicht mehrere datensätze in EINER tabelle mit verschiedenen werten befüllen + Multi-Zitat Zitieren
#12 12. September 2007 AW: SQL: mehrere updates in einem query Hast du Ahnung wovon du sprichst? Queries in einer For-Schleife abzusenden ist nicht anders als das was der Threadersteller versucht zu vermeiden, boing, murdoc, ich und viele anderen haben kein Problem mit Schleifen und Arrays, aber wir wollen in der Schleife lieber einen Query zusammenbauen, der mehrere Datensätze betrifft, als direkt mehrere Queries abzuschicken. Die Problematik des ganzen Threads ist, dass man bei einem Update Befehl z.B. nicht die Möglichkeiten wie bei einem INSERT - Query hat, mehrere Tupel direkt mit einem einfachen Query anzulegen/zu bearbeiten. Du und b-xxx haben effektiv noch nichtmal verstanden worum es ging, was jetzt auch wieder deine Antwort zeigt. Die bisher beste Alternative ist die von Murdoc, oder eine Datenbank-Umgebung zu nutzen die multiple Queries in einem Funktionaufruf erlaubt, oder ein DBMS wo mit einem Query mehrere Tupel ohne Join bearbeitet werden können etc .... Dies soll kein persönlicher Angriff sein, sondern nur eine kritische Betrachtung deiner Antwort. + Multi-Zitat Zitieren
#13 12. September 2007 AW: SQL: mehrere updates in einem query Hoi, wenn du php5 mit mysqli Erweiterung (und nen MysqlServer ab 4.1 ?) hast, dann sollte dir die Funktion mysqli_multi_query() weiterhelfen. Damit ist es möglich mehere Querys in einem zusammenzufassen, wenn man diese mit ; trennt. greetz blackbone //edit Möglicherweise muss auch multi-results und multi-statements über mysql_options bzw in der my.cnf aktiviert werden. Siehe MySQL :: MySQL 5.1 Referenzhandbuch :: 24.2.3.48 mysql_options() + Multi-Zitat Zitieren
#14 12. September 2007 AW: SQL: mehrere updates in einem query achja? danke für die information! ich weiß aber schon worums geht! wenn du in einer forschleife eine query zusammenbaust hast du im php code auch nur EINE query es werden halt mehrere querys ausgeführt aber anders ist es nun mal nicht möglich wenn du die querys mit ; trennst ists auch nicht anders, da werden auch mehrere ausgeführt und es ist unschöner als eine schleife die alternative von murdoc ist imo nicht besser als alle anderen, da es sich nicht um mehrere tabellen sondern um genau EINE tabelle handelt! und das ist mit einem join auch nicht lösbar! dies soll kein persönlicher Angriff sein, sondern nur eine kritische Betrachtung deiner Fähigkeit meine Antwort zu lesen ^^ + Multi-Zitat Zitieren
#15 12. September 2007 AW: SQL: mehrere updates in einem query Es geht darum nur einmal eine Verbindung zum mysql Server aufzubauen und nicht für jedes update Query eine und insofern nützt deine Variante nicht viel. Bzw auf einmal alles zusenden und nicht 30 mal nur eines. greetz blackbone + Multi-Zitat Zitieren
#16 12. September 2007 AW: SQL: mehrere updates in einem query Jo mit PHP5 hast du wahrscheinlich Recht, die C-Referenz von MySQL zu zitieren bringt aber leider glaube ich nichts, weil auf php.net eindeutig steht dass die Standardfunktion der mysql - api keine multiplen queries unterstützt, da eindeutige ressource identifier zurückgegeben werden. Es sind immer noch mehrere Queries. Nur weil ich die Augen zu mache, ist mein Computer physisch nicht verschwunden weil ich ihn nichtmehrt sehe. ... Soweit waren wir auch ohne dein Posting, was somit eigentlich zu Spam geworden ist. Richtig und wir haben eine Lösung gesucht, wie bereits oben boing, Murdoc und mir dargestellt, ähnlich dem Insert - Query, mehrere Tupel mit einem Query zu bearbeiten. Ähm? Schonmal etwas von einem self-join gehört? Aber das es nicht so schön geht wie z.B. bei einem Insert habe ich schon deutlich früher gesagt und den Rest kann jeder von uns.... LOL, o mann + Multi-Zitat Zitieren
#17 12. September 2007 AW: SQL: mehrere updates in einem query und wenn man vor der schleife verbindet, und nach der schleife die verbindung wieder trennt??? dann hat man imo nur einmal verbunden für alle querys die in der schleife ausgeführt werden ^^ und ob du nun die querys mit strichpunkt trennst oder sie nacheinander ausführst... das ist und bleibt das selbe ob du ins SQL*Plus eine query nach der anderen rein kopierst und ausführst oder alle gleichzeitig macht auch keinen unterschied + Multi-Zitat Zitieren
#18 12. September 2007 AW: SQL: mehrere updates in einem query Wir reden immernoch von Queries und nicht Verbindungen, leider kann diese Rüge auch an blackbone gehen, weil er sich falsch ausdrückte. Wer es schafft, sich mehrmals mit sql-server zu verbinden, ist selber schuld. Es bleibt leider nicht das selbe, wenn die PHP - Standardfunktion keine multiplen Queries in der von dir zitierten Form unterstützt. Zumal dieser Vorschlag auch nichtmehr neu ist. + Multi-Zitat Zitieren
#19 12. September 2007 AW: SQL: mehrere updates in einem query das versteh ich jetzt nicht... ich hab den vorschlag mit den ; nicht gemacht! und die trennung durch ; würde performance mäßig keinen vorteil bringen und noch dazu wäre der code hässlich! ich verstehe nicht was ich hier noch großartig herum diskuttiere... mehrere datensätze in einem update mit verschiedenen werten zu befüllen funktioniert nicht join bringt nichts trennung durch ; bringt nichts wahrscheinlich hat der threadstarter sein problem schon lange mit einer for schleife gelöst ^^ also vielen dank für die nette konversation! ich verzieh mich jetzt aus diesem thread und wünsch euch noch viel spaß beim finden der lösung die nicht existiert + Multi-Zitat Zitieren
#20 12. September 2007 AW: SQL: mehrere updates in einem query Die Referenz hatte ich nur verlinkt um aufzuzeigen wo bzw wie ggf die my.cnf angepasst werden muss. Es macht sehr wohl einen Unterschied ob 30 mal mysql_query() aufgerufen wird oder nur einmal. (Das ließe sich sicher auch performancetechnisch messen, besonderns bei einem externem Datenbankserver.) Außerdem gefällt mir (subjektiv) der Stil besser alles auf einmal rauszudrücken. (Mal abgesehen davon, dass der Threadersteller genau (/nur) danach gefragt hat.) Dass das Ergebnis der Verfahren gleich ist, streitet niemand ab. --- Achja, logischerweise wird nur eine Verbindung zum Server aufgebaut.. Ich bitte hochoffiziell um Entschuldigung für meine ungelenke Ausdrucksweise. greetz blackbone + Multi-Zitat Zitieren
#21 12. September 2007 AW: SQL: mehrere updates in einem query O Mann ... boing ... bitte Murdocs Lösungen testen, jedoch mit einem self join. beispielsweise so .. (funktioniert bei mir ohne Probleme mit mysql_query() gewrappt) PHP: UPDATE rt_kunden k1 , rt_kunden k2 SET k1 . kunde_name = 'test 278' , k2 . kunde_name = 'test 279' WHERE k1 . id_kunde = 278 AND k2 . id_kunde = 279 + Multi-Zitat Zitieren
#22 12. September 2007 AW: SQL: mehrere updates in einem query http://www.java2s.com/Code/SQL/Join/Selfjoin.htm @ ndreisg Code: UPDATE table1 AS t1, table1 AS t2, table1 AS t3 SET t1.field1 = 'a', t2.field1 = 'b', t3.field1 = 'c' WHERE t1.id = 1 AND t2.id = 2 AND t3.id = 3 nur ob das geht is fraglich^^ auf alle fälle wäre das ein selfjoin //makenx war schneller + Multi-Zitat Zitieren
#23 12. September 2007 AW: SQL: mehrere updates in einem query Jo das "AS" Statement macht bei mysql anscheinend Probleme, aber nun ja, ich würde zu der Diskussion damit gerne noch mehr sagen, aber ich verkneif es mir einfach mal. Jedoch muss man bedenken, dass so ein self-join auch durchaus mehr Performance fressen kann und man sich seine komplette Datensätze schrotten kann, wenn man z.B. die Where-Clause nicht richtig setzt oder die Version Stunk macht oder wie auch immer .... PS getestet habe ich es mit der letzten PHP4 - Version und nem "alten" mysq 4 - Server. + Multi-Zitat Zitieren
#24 13. September 2007 AW: SQL: mehrere updates in einem query schön, wie man immer diskussionen entfachen kann ich hab gerade mal ne kleine messung gemacht und mir beide varianten mit einer tabelle (id, feld1, feld2, feld3) angeschaut: 1) 100 x 100 updates (d.h. 100 x 100 queries) PHP: for( $j = 0 ; $j < 100 ; $j ++) { $timer = new c_Timer (); $timer -> start (); for( $i = 1 ; $i <= 100 ; $i ++) { $sql = "UPDATE multi_updates SET feld1=" . rand ( 0 , 100 ) . ", feld2=" . rand ( 0 , 100 ) . ", feld3=" . rand ( 0 , 100 ) . " WHERE id=" . $i ; mysql_query ( $sql ); } $timer -> stop (); array_push ( $time , $timer -> elapsed ()); } 2) 10 x 100 updates durch selfjoin (ja, nur 10, ihr seht unten, warum) PHP: for( $j = 0 ; $j < 10 ; $j ++) { $timer_loop = new c_Timer (); $timer_loop -> start (); $sql_a = $sql_v = $sql_w = "" ; for( $i = 1 ; $i < 100 ; $i ++) { $sql_a .= "multi_updates AS t" . $i . ", " ; $sql_v .= "t" . $i . ".feld1=" . rand ( 0 , 100 ) . ", t" . $i . ".feld2=" . rand ( 0 , 100 ) . ", t" . $i . ".feld3=" . rand ( 0 , 100 ) . ", " ; $sql_w .= "t" . $i . ".id=" . $i . " AND " ; } $sql = "UPDATE " . $sql_a . "multi_updates as t100 SET " . $sql_v . "t100.feld1=" . rand ( 0 , 100 ) . ", t100.feld2=" . rand ( 0 , 100 ) . ", t100.feld3=" . rand ( 0 , 100 ) . " WHERE " . $sql_w . "t100.id=100" ; $timer_loop -> stop (); array_push ( $time_loop , $timer_loop -> elapsed ()); $timer_sql = new c_Timer (); $timer_sql -> start (); mysql_query ( $sql ); $timer_sql -> stop (); array_push ( $time_sql , $timer_sql -> elapsed ()); } ergebnis: Code: Variante 1, 1 Query pro Schleifendurchlauf Mittelwert bei 100 x 100 Updates: 0.012737326622 Variante 2, self-join Mittelwert bei 1 x 100 Updates (Schleife): 8.3179473877E-5 Mittelwert bei 1 x 100 Updates (Query): 0.00317650079727 die methode, die ich für das statement benutze, mag nicht optimal sein - aber ich denke nicht, dass sich da viel optimieren lässt. vielleicht fehlt mir auch einfach der kaffee im körper, um sinnvolle gedanken hinzukriegen. es riecht nach battle + Multi-Zitat Zitieren