Announcement

Collapse
No announcement yet.

Nummern neu sortieren

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

  • Nummern neu sortieren

    Hallo,

    ich brauche mal kurz Hilfe von einem erfahrenden Nutzer.

    Ich habe ein kleines Problem ... ich habe eine Tabelle mit mehreren Spalten (ID, Nr, TypID, Name ... etc)
    Durch einen kleinen Fehler habe ich nun in der Spalte Nr doppelte Zahlen dadurch gibt es Fehler in meinem Script.

    ID: ist auf auto_increment ... bleibt auch so geht nur um Nr und TypID

    Ich möchte gerne die Nummern neu sortieren lassen allerdings nur von einem bestimmten TypID

    Also momentan ist es so:
    ID Nr TypID Name ...
    1 1 15 ... ...
    2 1 15 ... ...
    3 1 15 ... ...
    4 1 15 ... ...
    5 2 15 ... ...
    Und es soll so am ende aussehen:
    ID Nr TypID Name ...
    1 1 15 ... ...
    2 2 15 ... ...
    3 3 15 ... ...
    4 4 15 ... ...
    5 5 15 ... ...

    Realisieren wollte ich das mit dem SQL-Befehl:
    PHP Code:
    ALTER TABLE tabelenname ADD COLUMN (Nr int PRIMARY KEY AUTO_INCREMENT); 
    - Allerdings weiß ich nicht wie ich das nur auf die TypID beschränke ... Meine Tabelle hat mehrere 100.000 Zeilen


    Ich hoffe ihr könnt mir hierbei helfen,
    Grüße

  • #2
    Warum sollte dazu eine neue Spalte eingfügt werden?
    Wenn du nur sortieren möchtest, warum sollte sich von irgendeinem Datensatz die ID ändern?

    https://entwickler-forum.de/showthre...einen-anzeigen

    Geht es um sortieren (sortierte Ausgabe) oder um löschen der doppelten?
    Wenn du die doppelsten löscht, bleiben die IDs der bisherigen erhalten. Eine Änderung derer ist nicht erforderlich
    Christian

    Comment


    • #3
      Es geht nur um sortieren nicht um löschen.
      Wenn ich einfach so sortieren würde, würde sich ja die Sortierung der anderen TypIDs ändern, und das will ich eben vermeiden und nur sortieren für die TypID = 15

      Und von einer neuen Spalte war hier nie die Rede?

      Comment


      • #4
        ALTER TABLE tabelenname ADD COLUMN (Nr int PRIMARY KEY AUTO_INCREMENT);

        ist das einfügen einer neuen Spalte, was wohl aufgrund des Names fehlschlagen wird und du dann keinen eindeutigen PrimaryKey mehr hast
        Probieren würde ich das mit einem UPDATE der Spalte NR die den aktuellen Wert aus ein Subselect zieht und dort +1 aufaddiert
        Zuletzt editiert von Christian Marquardt; 20.08.2017, 18:51.
        Christian

        Comment


        • #5
          Das geht so einfach gar nicht. Aufsteigende Nummern generieren ist kein triviales Problem. Daten in einer Datenbank sind auch erstmal nicht sortiert oder besser gesagt rein zufällig sortiert. Wieviele Datensätze musst Du denn ändern? Wenn sich das per Hand machen lässt weil es < 100 Datensätze sind dann würde ich das einfach per Hand machen. Oder ist das so wie in Deinem Beispiel, dass die ab einer bestimmten ID alle "hintereinander" folgen, dann könntest Du auch sowas machen:

          [highlight=sql]
          UPDATE Tabelle
          SET Nr = ID -- hier kann auch ID - StartID + 1 stehen weil Du vermutlich nicht bei 1 anfangen wirst.
          WHERE Typ = 15 -- hier den Typ eintragen
          [/highlight]

          Comment


          • #6
            Ich hatte die Brille noch nicht auf, Lösung steht ja schon bei fanderlf.

            Aufsteigende Nummern kann man in mySQL mit Variablen (=rechnen) produzieren.
            Notfalls auch eine Hilfstabelle erzeugen mit autoinc und soviele Datensätze einfügen wie man braucht, diese dann als Quelle fürs Update nehmen, dann Hilfstabelle wieder löschen.

            Zahlen generieren in mysql:
            Code:
            SELECT  @curRow := @curRow + 1 AS row_number
            FROM    sometable 
            JOIN    (SELECT @curRow := 0) r
            WHERE   @curRow<100;
            Quelle: https://stackoverflow.com/questions/...rator-in-mysql
            Zuletzt editiert von defo; 21.08.2017, 09:16.
            Gruß, defo

            Comment

            Working...
            X