phpbar.de logo

Mailinglisten-Archive

Maximalwert

Maximalwert

Michael Donning donning at informenta.de
Mit Jan 5 15:31:56 CET 2005


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