aliii: nächstgrößere Zahl

moin

hab ne beispiel-db mit z.b. diesen einträgen.
opt | bs   | wert
-----------------
1   | a    | 1
1   | b    | 2
1   | c    | 4
1   | d    | 3
1   | e    | 6

leider wird das feld 'wert' auch manchmal (bei opt!=1) mit strings belegt. daher ist es ein VARCHAR...und kein int o.ä. .

nun will ich immer jeweils einen ebene(feld:wert) höher gehen.
z.b. wird bei bs=a begonnen. es wird also der wert gleich 1 ermittelt. da eine ebene höher ermittelt werden soll, muss also nun wert = 2 herausgefunden werden.
wenn man diesen hat, so muss schließlich 3 und danach 4 folgen.
doch nun tritt das problem auf, dass nicht wie erwartet (n+1), also 5 vorhanden ist, sondern gleich die zahl 6 folgt.
daher schlägt ...'WHERE(wert='.($alter_wert++).')' fehl.

nun such ich also irgend eine funktion, womit ich ohne alle einträge durchlaufen zu müssen, die nächst größere vorkommende zahl ermitteln möchte.

ich hoffe das problem ist irgendwie verständlich.

zu dem kommt eben noch, dass die tabelle eine zeilenanzahl von guten 40000 besitzt, daher wäre es wohl sinnlos, alle zeilen einzeln zu prüfen, ob wert>alter_wert<andere_werte_die_groeßer_als_alter_wert_sind ...

ist hoffentlich nachvollziehbar.

dann hoffe ich mal auf Eure hilfsbereitschaft und bedanke mich schonmal herzlichst.

  1. Servus,

    verwende die ROWID.
    Etwas in der Art müsste auch mysql haben.

    Gruss Matze

  2. Hallo aliii,

    grundaetzlich findest du den hoechsten Wert einer Spalte mit max(spaltenname), der naechsthoehere ist dann halt max(spaltenname) +1. Wie das bei Varchar aussieht, kann ich dir allerdings nicht so genau sagen. Ich hab das gerade mal an einer Varchar-Spalte ausprobiert, in der es nur Strings gibt, das Ergebnis war erwartungsgemaess ein Wort mit 'w' am Anfang (x,y u. z kommen nicht vor).

    Gruß,

    Dieter

  3. Hallo, aliii!

    daher schlägt ...'WHERE(wert='.($alter_wert++).')' fehl.

    wie wäre es mit 'WHERE(wert>'.$alter_wert.') ORDER BY wert ASC LIMIT 1' ?
    oder du prüfst, ob ein ergebnis zurückgegeben wurde und wiederholst notfalls die abfrage (falls die lücken nicht all zu oft auftauchen, oder zu gross sind).

    freundl. Grüsse aus Berlin, Raik

  4. yo,

    nun such ich also irgend eine funktion, womit ich ohne alle einträge durchlaufen zu müssen, die nächst größere vorkommende zahl ermitteln möchte.

    SELECT MIN(wert)
    FROM tabellenname
    WHERE wert > alter_wert

    Ilja