Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehlende Zahl ergänzen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Alternativ aufsteigend Sortieren und von 1 weg einfach hochzählen bis die erste Lücke kommt und die dann nehmen. Müsste man "durchmessen" was auf Dauer bei großen Daten effektiver/schneller ist.
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #17
      Es reicht völlig erst zu sortieren und dann stumpf die Sequenz neu zu vergeben... da muss man nix prüfen. Sobald eine Lücke existiert, müssen ohnehin alle nachfolgenden Nummern neu belegt werden.
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #18
        Ja, hab ich mir im Nachhinein dann auch gedacht, daher oben nochmals diesen Weg erwähnt. Eigentlich braucht man nur "hochzählen" bis zur Lücke und fertig.
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #19
          Warum wird die Nummer überhaupt gelöscht, wenn sie doch so wichtig ist?
          Lösche den Inhalt der Spalten bis auf die Spalte mit der Nummer, ist das nicht viel einfacher?

          Kommentar


          • #20
            Zitat von protestix Beitrag anzeigen
            Warum wird die Nummer überhaupt gelöscht, wenn sie doch so wichtig ist?
            Lösche den Inhalt der Spalten bis auf die Spalte mit der Nummer, ist das nicht viel einfacher?
            Da geb ich dir Recht. Es reicht ja ein markantes Feld zu NULL zu setzen. Das Finden und Aktualisieren dieser Datensätze wird auch einfacher.

            Unabhängig davon hatte ich noch ein SQL im Hinterkopf um Lücken zu finden:
            Testdaten
            Code:
            id   artikelId
            1    0
            2    1
            3    1
            4    0
            5    2
            6    23
            7    5
            8    3
            SQL
            Code:
            set @lastId = null;
            SELECT gapStart, gapEnd FROM
            (SELECT 
              @lastId as lastId, 
              @lastId+1 as gapStart, 
              artikelID-1 as gapEnd,
              @lastId:= artikelID as curId 
              FROM artikelorder ORDER BY artikelID) as t1
            WHERE lastID IS NOT NULL AND curId - lastId > 1
            Resultat
            Code:
            gapStart    gapEnd
            4           4
            6           22

            Kommentar


            • #21
              um firstwhole zu finden reicht ...

              Code:
              create table mynumbers (
                  id INT NOT NULL AUTO_INCREMENT,
                  zahl INT NOT NULL,
                  PRIMARY KEY (id)
              );
              
              insert into mynumbers (zahl) values
                  (1), (2), (3), (4), (5), (6), (7), (8), (9),
                  (10), (12), (13), (15), (16), (17), (18), (19), (20);
              
              select compare.zahl + 1 as firstwhole 
                from mynumbers as compare 
                left outer join mynumbers as isval on compare.zahl + 1 = isval.zahl 
                where isval.zahl is null 
                limit 1;

              Kommentar


              • #22
                Zitat von protestix Beitrag anzeigen
                Warum wird die Nummer überhaupt gelöscht, wenn sie doch so wichtig ist?
                Lösche den Inhalt der Spalten bis auf die Spalte mit der Nummer, ist das nicht viel einfacher?
                Die Nummer wird gelöscht, weil man nicht unnötig die Datenbank aufblasen möchte. Die Menge der Inhalten kann sich in der Zukunft sehr hoch steigern.

                Danke für die Lösungswege, ich werde erstmal prüfen wie schnell die Geschichte mit dem Hochzählen ist (wo ich das jetzt lese, ist dieser Weg auch für mich total logisch..).

                Ich kann mir vorstellen dass die SQL Lösung noch schneller ist. Werde es mal ausprobieren..

                Kommentar


                • #23
                  Zitat von JoePetts Beitrag anzeigen
                  Im schlimmsten Fall können hier bis zu 200 Lücken entstehen. Deswegen ist es eher schwer mit der Lösung oder?
                  Also hast du im Schlimmsten Fall 200 leere Datensätze.
                  Das ist ein Witz für eine DB.

                  Kommentar

                  Lädt...
                  X