Jörg: Spalte mit fortlaufenden Zahlen füllen

Hallo,

wie kann ich am schnellsten in einer einspaltigen tabelle diese Spalte fortlaufend mit Zahlen von 10000 bis 100000 füllen?

Hintegrund ist, dass ich diese Tabelle benötige, um in einem späteren Prozess freie Nummern schneller zu finden als wenn ich in der Produktivtabelle die schon belegten Nummern suchen muss. Es ist also eine reine Hilfstabelle.

Jörg

  1. Hi,

    Hintegrund ist, dass ich diese Tabelle benötige, um in einem späteren Prozess freie Nummern schneller zu finden als wenn ich in der Produktivtabelle die schon belegten Nummern suchen muss. Es ist also eine reine Hilfstabelle.

    Ist die Nummernspalte der Produktivtabelle etwa keine auto-increment-Spalte?

    Irgendwie klingt das nach einem "komischen" Prozeß, was Du da vorhast …

    Bei Deinem Verfahren sehe ich die Gefahr von TOCTTOU …

    cu,
    Andreas a/k/a MudGuard

    1. Hi Andreas,

      Ist die Nummernspalte der Produktivtabelle etwa keine auto-increment-Spalte?

      Nein, das ist sie nicht und darf es auch nicht sein, da es um Kundennummern geht. Da muss der User freie Wahl haben.

      Irgendwie klingt das nach einem "komischen" Prozeß, was Du da vorhast …

      Ist auch so, aber nötig.

      Ich möchte im Prozes dem User immer die nächste freie Kunden-/Lieferantennummer (nach datev) vorschlagen. Der Suchprozess innerhalb der Kunden dauert aber gefühlt ewig, weil die Suche nicht so easy ist.

      Daher das Hiolfstabellensystem, das alle möglichen Nummern beinhaltet und dann beim Anlegen eines neuen Kunden/Lieferanten erst die nächste freie Nummer vorschlägt und anschließend aus der Hilfstabelle löscht.

      Nun könnte ich ja flugs ein php-Script schreiben, das mir die Hilfstabelle füllt, ich wollte nur wissen, obs nicht auch einen SQL Befehl gibt, der sowas machen kann.

      Jörg

      1. Hi,

        Nein, das ist sie nicht und darf es auch nicht sein, da es um Kundennummern geht. Da muss der User freie Wahl haben.

        Wenn Du das sagst …

        Daher das Hiolfstabellensystem, das alle möglichen Nummern beinhaltet und dann beim Anlegen eines neuen Kunden/Lieferanten erst die nächste freie Nummer vorschlägt und anschließend aus der Hilfstabelle löscht.

        Das riecht wirklich sehr stark nach TOCTTOU-Problemen …

        Nun könnte ich ja flugs ein php-Script schreiben, das mir die Hilfstabelle füllt, ich wollte nur wissen, obs nicht auch einen SQL Befehl gibt, der sowas machen kann.

        autoincrement darf's nicht sein, weil's keine fortlaufenden Nummern sind, aber die vorzuschlagenden Nummern sind fortlaufende Nummern?

        Also eigentlich ne autoincrement-Spalte in der Kundentabelle …

        cu,
        Andreas a/k/a MudGuard

        1. Hallo MudGuard,

          autoincrement mit optionalen Abweichungen. Sprich: Ein eigenwilliger Fachbereich, der seine EDV unbedingt von Hand erledigen will.

          Vielleicht sollen VIP Kunden ja auch Vanity-Kundennummern bekommen können.

          Das TOCTTOU Problem muss man beim Update lösen; was zunächst als frei ermittelt wurde, kann beim Update besetzt sein. Das gilt aber auch für manuell vergebene Kundennummern; die können ja ebenfalls schon existieren.

          Rolf

          --
          sumpsi - posui - obstruxi
      2. Hallo Jörg,

        einen SQL Befehl gibt, der sowas machen kann

        Eine PHP Schleife ist vermutlich am schnellsten programmiert. MySQL kennt zwar Schleifenbefehle, aber die sind nur in Stored Procedures & Co erlaubt.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Hallo Jörg,

          einen SQL Befehl gibt, der sowas machen kann

          Eine PHP Schleife ist vermutlich am schnellsten programmiert. MySQL kennt zwar Schleifenbefehle, aber die sind nur in Stored Procedures & Co erlaubt.

          Rolf

          Hi Rolf,

          ok, danke.

          Jörg

    2. Hallo MudGuard,

      Bei Deinem Verfahren sehe ich die Gefahr von TOCTTOU …

      Man verwende InnoDB, eine Transaktion und wähle SERIALIZABLE als Isolation Level, dann kann zwischen TOC und TOU nichts passieren.

      Eine AUTOINCREMENT-Spalte in der eigentlichen Tabelle kommt mir aber auch wie die bessere Idee vor - es sei denn, es gibt den Zwang, die Nummern im genannten Intervall zu halten und freiwerdende Nummern zu recyclen. Sowas ist aber zumeist die Ausnahme.

      Die bei Auto-Inkrement vom System vergebene ID findet man mit PDO in $db->lastInsertId() bzw. mit mysqli in $statement->insert_id

      Rolf

      --
      sumpsi - posui - obstruxi
  2. Hello,

    dafür gibt es Indexe und Constraints. Die sind dann auch TOCTTOU-fest.

    Eine direktgestreute Tabelle hat man für sowas wohl vor 100 Jahren auf Hollerith das letzte Mal benutzt ;-P

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Hallo Tom,

      Die Kombi von Lochkarten und direkt gestreuter Speicherung bekommst Du nur, wenn Du dem Mensch, den den Lochkarten-Stapel vorbei bringt, ein Bein stellst 🤣

      Rolf

      --
      sumpsi - posui - obstruxi
      1. Hello Rolf,

        Die Kombi von Lochkarten und direkt gestreuter Speicherung bekommst Du nur, wenn Du dem Mensch, den den Lochkarten-Stapel vorbei bringt, ein Bein stellst 🤣

        Das ist dann wohl eher eine Methode, aus geordneter Datenhaltung eine randomisierte zu machen :-)

        Ich hab früher aus den Lochkarten immer Häuschen für meine Modelleisenbahn gebaut. Da gab es weiße, rote, grüne und gelbe Karten. Und manchmal hatten die Wände dann auch schon viele Fensterchen.

        Glück Auf
        Tom vom Berg

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
      2. Hi,

        Die Kombi von Lochkarten und direkt gestreuter Speicherung bekommst Du nur, wenn Du dem Mensch, den den Lochkarten-Stapel vorbei bringt, ein Bein stellst 🤣

        wir hatten das mal mit einem (nicht ganz unbedeutenden) Versicherer.

        Wir haben dem Versicherer elektronisch Kundendaten (in Textform, a la Beschreibungsliste dl 😉) geschickt, ergab ausgedruckt 1,2 bis 1,9 Seiten (also 2 Blatt).

        Irgendwann kam dann die Bitte, die identifizierende Nummer auch auf das 2. Blatt zu drucken - derjenige, der die Daten vom Drucker zu den Sachbearbeitern getragen hatte, war gestolpert, und konnte die Seiten nicht mehr zusammensortieren.

        Die Steigerung kam dann noch: ob wir das nicht als PDF schicken könnten - dann könnten sie das PDF automatisch per OCR in Text überführen. Direkt die Textdatei zu verwenden war wohl zu kompliziert.

        cu,
        Andreas a/k/a MudGuard

        1. Hallo MudGuard,

          Direkt die Textdatei zu verwenden war wohl zu kompliziert.

          Das klingt spinnert, aber dieser Wahnsinn hat eine logische Methode. Wenn man einen Eingangsmanagement-Prozess hat, der auf Ganzseitenformate (TIF/GIF/JPEG/PDF) getrimmt ist, dann ist eine Textdatei erstmal ein Fremdmedium.

          D.h. man müsste dafür erstmal einen Konverter vorschalten, der die Textdatei in ein Ganzseitenformat überführt, und da fragt man als sparsamer IT Dienstleister doch erstmal den Lieferanten, ob er das nich fertig anliefern kann.

          Rolf

          --
          sumpsi - posui - obstruxi