Mailinglisten-Archive |
Moin Benedikt, > -----Original Message----- > From: Benedikt Quirmbach [mailto:benedikt at quirmbach.de] >... > Folgenzählung "Löcher" entstehen (1,2,3,6,7,8). Dafür habe > ich mir ein > Statement ausgedacht, dass leider nicht funktioniert. Vielleicht kann > mir jemand das richtig rücken: > > String sql = "INSERT INTO adressen (owner, ort, str, tel, selected, > aktiv, folge) VALUES ('" + return_owner + "', '" + this_ort + > "', '" + > this_str + "', '" + this_tel + "', 0, 1, IF(MAX(folge)<" + > Integer.parseInt(this_folge) + ",'" + this_folge + "',MAX(folge)))"; > > Die entscheidende Stelle ist wohl " IF(MAX(folge)<" + > Integer.parseInt(this_folge) + ",'" + this_folge + "',MAX(folge))". > Nehme ich statt dessen ",'" + this_folge + "'" funktioniert > das INSERT, > aber natürlich nicht die Reihenfolgenbegrenzung. Die Funktion MAX ist eine Aggregatfunktion. Diese wird in Select-Statements verwendet. In einer Insert Funktion klappt das also so nicht. Alternativ könnte man etwas in der Art machen (ungetestet): INSERT INTO adressen (owner, ort, str, tel, selected, aktiv, folge) SELECT FROM Adressen (hier Dein Inhalt der Values () ) Das soll ab MySQL ver. 4.0.14 funktionieren (evtl. aber nur wenn mindestens ein Satz in adressen ist). (In vorherigen Versionen war es nicht erlaubt die Tabelle des INSERT Statements im Select Statement erneut aufzuführen). Normalerweise wäre das auch eine gute Anwendung für Trigger, dafür brauchts aber wohl MySql 5.1. Man kann alternativ Max(folge) auch in einem vorherigen Statement ermitteln, sollte dann aber mit Transaktionen bzw. Locks arbeiten. Grüße, Michael Donning -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive