Announcement

Collapse
No announcement yet.

Fortlaufende Nummern / Lücken nachrücken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fortlaufende Nummern / Lücken nachrücken

    Hallo,
    ich stehe vor folgendem Probelm, zu dem ich bislang keine "saubere" lösung gefunden habe und hoffe auf Eure Hilfe:
    Ich habe Tabellen u.a mit einer Spalte Zeilennummern. Nun muss ich z.B. die Zeilen 10-20 aus der tabelle löschen. Die nachfolgenden Zeilen sollen nun aufrücken. Also zeile 21 wird zu zeile 10. Bislang muss ich jede nachfolgenden Datensatz in die Hand nehmen und ändern. Gibt es berrechnende Werte oder einen andren Weg, um das zu machen?
    Danke für Eure Hilfe.

  • #2
    Hi,

    ist es denn so wichtig, dass die Zahlen nachrücken?

    Wenn es sich um Id's handelt ist dies im normalerweise sogar eher unerwünscht. Falls du die zahlen brauch, um zum Beispiel die "Zeilen" 10-15 auszugeben, kannst du einfach Limit verwenden.
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment


    • #3
      Sollte mit einem Update-Statement gehen:

      Update <Tabelle> set <MeinFeld> = <MeinFeld> - <Anzahl gelöscht> where <Schlüsselfelder> = <Wert> and <MeinFeld> > <Grenzwerte wo änderung erfolgen soll>

      Comment


      • #4
        Update kling nach einer schönen Lösung. Danke mal für den Tipp, werds heut Abend mal antesten.

        Und ja, die Zeilennummern müssen in diesem Fall nachrücken, weil ich nur an dieser einen Abgleich machen kann. Un da ich die etwa 1500 Records im schlimmsten fall schon nach 3 sekunden wieder ändern muss - also die vordesten Zeilen löschen - geht da ganz schön viel Netzwerkresource drauf.

        Comment


        • #5
          Ich hatte in meinen über 20 Jahren Datenbankprogrammierung noch nie so einen Fall, wo das wirklich notwendig gewesen wäre und daher würde es mich interessieren, unter welcher Konstellation so eine Vorgangsweise sinnvoll ist. Kannst du mal kurz schildern, was da abgeglichen wird und warum das nicht funktionieren würde, wenn man die ID's nicht ändern würde?

          bye,
          Helmut

          Comment


          • #6
            ich habe eine art playliste, welche ich anhand der Zeilennummer abgleichen kann. alle anderen spalten wie zeit,dauer,titel sind als index nicht nutzbar. jetzt kann es sein, dass die zeile 100-110 aus der playliste gelöscht wird. ich müsste jettz diese aus der db löschen und alle nachfolgenden zeilen einzeln modden (weil ja jetzt die zeilennummer um 10 weniger ist). selbiges wenn zeilen engefügt werden. besonders wenn die erste zeile abgespeilt ist, müste ichj 2000 records nachziehen.
            hast du dafür eine idee??

            Comment


            • #7
              Hallo,

              um solch eine Explizite Sortierung zu erreichen, ist es sinnvoller eine Trennung zwischen physischer (in der DB gespeicherter) Sortierreihenfolge und der angezeigten Zeilennummer vorzunehmen. Die schöne, bei 1 beginnende und in Einzelschritten fortlaufende, "Zeilennummer" kann dabei durchaus eine "Imaginäre" also von der Anwendung berechnete sein. Für die eigentliche Sortierreihenfolge kann man dann z.B. ein Float-Feld wählen. Durch Löschung entstehende Lücken sind für die Sortierreihenfolge irrelevant und können ignoriert werden. Beim Einfügen von "Zeilen" kann man sich dann die Tatsache zu nutze machen, dass im Bereich der Reellen Zahlen zwischen zwei Zahlen immer noch eine "dazwischen" passt. Am einfachsten (linkeZahl + rechteZahl) / 2. Damit hält sich der Aufwand "on the fly" in Grenzen.
              Um nicht irgendwann in den Bereich von "Rundungsdifferenzen" nach vielen Einfügeoperationen zu kommen, liese sich ein zeitlich gesteuertes "Aufräumscript" implementieren, welches z.B. einmal am Tag die Sortierung wieder auf 1, 2, 3, ... (oder 10, 20, 30) normiert.

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment

              Working...
              X