tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
618
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kesnw kesnw ist offline Mitglied Brokat
    Registriert seit
    Sep 2003
    Beiträge
    338
    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.
     

  2. #2
    Avatar von aquasonic
    aquasonic aquasonic ist offline Mitglied Brillant
    Registriert seit
    Jan 2004
    Ort
    Schweiz :: Bern
    Beiträge
    942
    PHP-Code:
    $sql "SELECT L_ID FROM table";
    $result mysql_query($sql);
    $temp 1;
    while (
    $query mysql_fetch_row($result)) {
      if (
    substr($query[0], 3strlen($query[0])-3) > $temp) {
        
    $frei "rva" $temp;
        break;
      }
      else {
        
    $temp++;
      }

    Ist ungetestet, sollte aber gehen...
     
    MfG AqUaSoN!C

    o Wie man richtig Fragen stellt o

    o Nicht in Problemen sondern in Lösungen denken! o

    o Es gibt 2 Dinge, die sind unendlich: das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir noch nicht ganz sicher. o

    > Meine Linksammlung > http://linksys.aquasonic.ch

    > Mein Wiki > http://wiki.aquasonic.ch

  3. #3
    kesnw kesnw ist offline Mitglied Brokat
    Registriert seit
    Sep 2003
    Beiträge
    338
    Danke, aber das ergebnis sollte immer fünfstellig sein, also z.B. rva12345

    Könntest du mir da bitte nochmal helfen?
     

  4. #4
    boelkstoff boelkstoff ist offline Mitglied Gold
    Registriert seit
    Aug 2003
    Beiträge
    175
    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
     

  5. #5
    Registriert seit
    Dec 2001
    Ort
    Köln
    Beiträge
    796
    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
     
    You want me to be, something I can never ever be!

  6. #6
    kesnw kesnw ist offline Mitglied Brokat
    Registriert seit
    Sep 2003
    Beiträge
    338
    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...
     

  7. #7
    hans_schmid hans_schmid ist offline Mitglied Gold
    Registriert seit
    Jul 2003
    Beiträge
    180
    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...
     

  8. #8
    hans_schmid hans_schmid ist offline Mitglied Gold
    Registriert seit
    Jul 2003
    Beiträge
    180
    PHP-Code:
    $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], 3strlen($query[0])-3) > $temp) { 
        if(
    $temp 10){
        
    $frei "rva0000" $temp
        }
        if(
    $temp 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.
     

Ähnliche Themen

  1. Freie Look an Feels?
    Von Smily0412 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 11.02.08, 14:17
  2. MySQL: freie ID suchen mit hindernissen
    Von Gray im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 09.10.07, 15:56
  3. Freie Meinungsäußerung?
    Von MeisterLampion im Forum Smalltalk
    Antworten: 5
    Letzter Beitrag: 26.09.07, 23:50
  4. Freie Datenbanken
    Von steyrblade im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 17.02.07, 13:44
  5. freie Formate in cm
    Von walter gramming im Forum Photoshop
    Antworten: 4
    Letzter Beitrag: 15.10.05, 15:33