auto increment datensatzweise umgehen

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

  • auto increment datensatzweise umgehen

    moin,
    ich habe das problem, dass ich eine tabelle habe, in der ich sehr gerne eine gewisse anzahl an datensätzen, über die id sortiert, immer am ende der tabelle haben würde.

    sieht folgendermaßen aus:
    1
    2
    .
    .
    295
    .
    1000000
    1000001


    ich würde nun gerne wissen, ob es irgendwie möglich ist das auto increment ignorieren zu lassen, dass es die 1mio werte gibt und stattdessen weiterhin brav in den niedrigeren werten incrementieren zu lassen.

    die datensätze werden über die id identifiziert und es ist halt wichtig, dass die werte mit der 1 mio id immer und ausschließlich sie am ende der tabelle stehen. die ids werden auch außerhalb der tabelle nicht gespeichert, dementsprechend ist der wert der id im prinzip egal, abgesehen davon, dass diese datensätze halt am ende stehen müssen.

    mfg
    Zuletzt geändert von mopf; 08.09.2009, 01:28.

  • #2
    Hallo,

    es ist prinzipiell irgendwie möglich, aber warum sollte man sowas wollen? Willst du nicht vielleicht lieber noch eine Spalte hinzufügen, in der du sowas machst?

    Zurück zum Thema. Ich beziehe mich dabei auf InnoDB, die anderen benutze ich fast nie und bin daher nicht sicher, ob es da auch gilt.

    Solange der MySQL Server läuft, benutzt er den auto_increment-Wert fortlaufend, also unterhalb deiner großen Extra-Werte. Wenn du ihn neu startest, initialisiert er sich jedoch mit dem größten in der Tabelle enthaltenen Wert und würde dann ab dort weiterzählen. Also müsstest du dafür Sorge tragen, nach jedem Serverneustart, den auto_increment-Zähler wieder nach unten zu drücken.

    Ich halte das, wie gesagt, für ziemlich daneben und rate dringendst dazu, das DB-Design zu überdenken. Wenn es nur um die Sortierung der Ausgabe geht, kann man doch auch mit order by die Reihenfolge bestimmen und dabei die Primärschlüsselspalte als Sekundärsortierung verwenden. Damit würdest du nur noch eine boolean Spalte für die "hohen" Datensätze benötigen, die dann als Primärsortierung herhält:

    Code:
    id, is_at_end
    --------------
    1, 0
    2, 0
    3, 1
    4, 1
    5, 0
    6, 0
    Code:
    select * from tabelle order by is_at_end, id
    ergibt
    Code:
    1, 0
    2, 0
    5, 0
    6, 0
    3, 1
    4, 1
    oder

    Code:
    select 1000000 * is_at_end + id as id2 from tabelle order by id2
    ergibt
    Code:
    1
    2
    5
    6
    1000003
    1000004
    Gruß,

    Anja
    Zuletzt geändert von AmicaNoctis; 08.09.2009, 01:42.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      IDs sollten nur zur Identifizierung dienen und zu sonst nichts. Bitte keine IDs für irgendwas anderes missbrauchen. Das wird früher oder später zur Sackgasse. Wenn du einen Wert zur Anordnung brauchst, dann erstell eine neue Spalte dafür.

      Kommentar


      • #4
        hoi, erstmal schonmal danke.
        ich weiß, dass ids nur der identifizierung dienen, tun sie in dem fall prinzipiell auch, sie sollten halt nur was zusätzliches machen..

        und zu amica, daran hatte ich bislang noch nicht gedacht, ich werde mal schauen, ob und wie ich das realisiert bekomme, dann packe ich mir meine enddatensätze der übersichtlichkeit halber an den anfang und sortiere nach dem booleanschen primärschlüssel.

        theoretisch sollte er dann als sekundär sortierung wieder die ids nutzen, oder?

        und sowohl order by, als auch select from helfen mir in dieser sache relativ wenig, da es nicht drauf ankommt, wie ich das aus der tabelel raushole, sondern wie es in der tabelle drinsteht :/

        auf die ausgabe habe ich leider keinerlei einfluss..

        mfg

        edit:
        danke, hat geklappt
        Zuletzt geändert von mopf; 08.09.2009, 11:18.

        Kommentar


        • #5
          Zitat von mopf Beitrag anzeigen
          hoi, erstmal schonmal danke.
          ich weiß, dass ids nur der identifizierung dienen, tun sie in dem fall prinzipiell auch, sie sollten halt nur was zusätzliches machen..
          Nein. IDs sollen nichts zusätzlich machen. Nur identifizieren. Aus.

          Kommentar


          • #6
            Zitat von mopf Beitrag anzeigen
            sie sollten halt nur was zusätzliches machen..
            Sollen sie eben nicht

            Zitat von mopf Beitrag anzeigen
            und sortiere nach dem booleanschen primärschlüssel.
            Das ist kein Primärschlüssel, nur ne zusätzliche Spalte. Mit nem boolschen Primärschlüssel dürfte es ja nur zwei Datensätze geben

            Zitat von mopf Beitrag anzeigen
            theoretisch sollte er dann als sekundär sortierung wieder die ids nutzen, oder?
            Genau!

            Zitat von mopf Beitrag anzeigen
            und sowohl order by, als auch select from helfen mir in dieser sache relativ wenig, da es nicht drauf ankommt, wie ich das aus der tabelel raushole, sondern wie es in der tabelle drinsteht :/

            auf die ausgabe habe ich leider keinleri einfluss..
            Wie Datensätze in einer Tabelle drinstehen, ist wurschtegal. Du siehst ja nie, wie sie drin stehen. Sobald du sie siehst, hast du sie schon rausgeholt. Denk mal drüber nach...

            Wieso hast du keinen Einfluss auf die Ausgabe?

            Wenn das stimmt, dann mach dir doch ein View mit dem besprochenen order by und benutze das für die Ausgabe statt der eigentlichen Tabelle.

            Gruß,

            Anja
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Zitat von h3ll Beitrag anzeigen
              Nein. IDs sollen nichts zusätzlich machen. Nur identifizieren. Aus.
              ist mir egal :P
              außerdem tun sies jetzt wieder aussschließlich, wobei ich gerade überlege, ob sie denn zumindest außerhalb der tabelle irgendwo abgefragt werden...

              außerdem klappt es ja nu.
              danke nochmal

              mfg

              Kommentar

              Lädt...
              X