nächste freie id in DB suchen

kesnw

Erfahrenes Mitglied
Hallo,

ich habe in meiner DB eine Spalte "L_ID", die Werte von "rva00001" bis "rva99999" annehmen kann. nun möchte ich einen freien Wert suchen. Wie stelle ich das am Geschicktesten an?

Bsp.:
L_ID |
-------------|
rva00001|
rva00002|
rva00003|
rva00005|
rva00006|
rva00567|
-------------|

Hier soll nun das Ergebnis rva00004 geliefert werden.
 
PHP:
$sql = "SELECT L_ID FROM table";
$result = mysql_query($sql);
$temp = 1;
while ($query = mysql_fetch_row($result)) {
  if (substr($query[0], 3, strlen($query[0])-3) > $temp) {
    $frei = "rva" . $temp;
    break;
  }
  else {
    $temp++;
  }
}

Ist ungetestet, sollte aber gehen...
 
Danke, aber das ergebnis sollte immer fünfstellig sein, also z.B. rva12345

Könntest du mir da bitte nochmal helfen?
 
erklärst Du mal , warum Du dort immer rva00001 stehen hast?

Ich hatte das mit einer autoincrement spalte gelöst

um im quelltext dann die führenden Nullen und das rva ergänzt.
Aber in der DB hätte ich das als Int gelassen
 
Original geschrieben von boelkstoff
erklärst Du mal , warum Du dort immer rva00001 stehen hast?

Ich hatte das mit einer autoincrement spalte gelöst

um im quelltext dann die führenden Nullen und das rva ergänzt.
Wenn Du der Spalte zusätzlich noch die Option zerofill gibst, dann brauchst Du dich um die führenden Nullen auch nicht mehr kümmern :)
 
Grund ist, dass ich bereits eine Spalte habe in der Lieferantennummern (int) drinstehen.

So wie ich das sehe, muss ich doch auch beim Select erst mal sortieren, um die nächste freie ID zu finden oder?

wie zur Hölle bekomme ich aber die führenden Nullen und die fünf Stellen da rein?

Bitte um Hilfe...
 
Also ich hab mal diesen Denkansatz:

1. Die Daten per "ORDER BY" Klausel ordnen (das müsste eigentlich funktionieren)
2. Einen counter während der Ausgabe mitlaufen lassen.
3. Die zahlen (wie es aquasonic macht) vergleichen und die freie Stelle feststellen
4. Anzahl der Nullen über den counter bestimmen: counter < 10 --> 4 Nullen | 9 < counter < 100 --> 3 Nullen | und so weiter...
5. Den String wieder zusammensatzen

Ich bin jetz zu müde, um nen Code zusammen zu schustern ;-)
Aber evtl. hilft Dir ja mein Denkansatz schon weiter...
 
PHP:
$sql = "SELECT L_ID FROM table ORDER BY L_ID ASC"; 
$result = mysql_query($sql); 
$temp = 1; 
while ($query = mysql_fetch_row($result)) { 
  if (substr($query[0], 3, strlen($query[0])-3) > $temp) { 
    if($temp < 10){
    $frei = "rva0000" . $temp; 
    }
    if($temp > 9 AND $temp < 100){
    $frei = "rva000" . $temp; 
    }
    if($temp > 99 AND $temp < 1000){
    $frei = "rva00" . $temp; 
    }
    if($temp > 999 AND $temp < 10000){
    $frei = "rva0" . $temp; 
    }
    if($temp > 9999){
    $frei = "rva" . $temp; 
    }
    break; 
  } 
  else { 
    $temp++; 
  } 
}
Nicht getestet, sollte aber so funktionieren.
 
Zurück