kungschu: ID Verwaltung in DB

Hallo.

Ich habe mich gefragt, wie man geschickterweise IDs für einzelne Beiträge in einem Blog (oder dergleichen) erstellt, um später mittels der ID auf einzelne Beiträge zugreifen oder Kommentare zuordnen zu können.

Wie wird das in der Regel realisiert? Gibt es einen Königsweg?

Macht ein DB-Feld vom Typ datetime Sinn? Was wäre eine Möglichkeit, wenn datetime nicht eingesetzt werden kann (beispielsweise, weil theoretisch mehrere Postings in einer Sekunde erfolgen könnten)? Welcher Feld-Typ ist dann empfehlenswert?

Wie habt ihr das gelöst?

Noch eine Frage: Wie kann man bei einem Eintrag in eine Tabelle (INSERT INTO) bestimmen, dass der Eintrag am Anfang oder Ende der Tabelle eingefügt werden soll?(Damit später der aktuellste Eintrag stets als erster ausgelesen wird usw..)

Danke.

MfG, Kungschu.

  1. hi,

    Ich habe mich gefragt, wie man geschickterweise IDs für einzelne Beiträge in einem Blog (oder dergleichen) erstellt, um später mittels der ID auf einzelne Beiträge zugreifen oder Kommentare zuordnen zu können.

    Als unsigned Integer, möglicherweise mit Zusätzen wie auto_increment o.ä. versehen.

    Macht ein DB-Feld vom Typ datetime Sinn?

    Zum Speichern des Zeitpunktes des Eintrages - natürlich.
    Als ID - nein.

    Noch eine Frage: Wie kann man bei einem Eintrag in eine Tabelle (INSERT INTO) bestimmen, dass der Eintrag am Anfang oder Ende der Tabelle eingefügt werden soll?(Damit später der aktuellste Eintrag stets als erster ausgelesen wird usw..)

    Gar nicht.
    In einer Tabelle exisitiert kein "oben" und kein "unten".
    Sortierung stellst du immer beim Auslesen der Daten her.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo wahsaga.

      Als unsigned Integer, möglicherweise mit Zusätzen wie auto_increment o.ä. versehen.

      Ok. Angenommen ich mache es so: Ich habe ein Feld "id" (Typ: INT) mit auto_increment; so würde doch das erste Posting die id 1 erhalten, das zweite die id 2 usw...(?) "id" wäre immer das erste Feld in der Zeile und als Index definiert.

      Wie werden die Einträge dann "gelistet"? Ist die höchste id immer oben?

      In einer Tabelle exisitiert kein "oben" und kein "unten".
      Sortierung stellst du immer beim Auslesen der Daten her.

      Wie kann / sollte ich also nach Aktualität sortieren?

      MfG, Kungschu.

      1. hi,

        Ok. Angenommen ich mache es so: Ich habe ein Feld "id" (Typ: INT) mit auto_increment; so würde doch das erste Posting die id 1 erhalten, das zweite die id 2 usw...(?) "id" wäre immer das erste Feld in der Zeile und als Index definiert.

        Wie werden die Einträge dann "gelistet"? Ist die höchste id immer oben?

        Nein, nicht zwangsläufig.

        Stelle Sortierung _immer_ selber her, wenn du Sortierung willst - in dem du es beim Auslesen explizit verlangst.

        Wie kann / sollte ich also nach Aktualität sortieren?

        Über das gespeicherte Datum natürlich.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hallo.

          Stelle Sortierung _immer_ selber her, wenn du Sortierung willst - in dem du es beim Auslesen explizit verlangst.

          Mit welchen Ausdrücken kann ich überprüfen, welches Datum am aktuellsten ist? Wie könnte eine solche Sortierung also aussehen?

          Danke.

          MfG, Kungschu.

          1. hi,

            Mit welchen Ausdrücken kann ich überprüfen, welches Datum am aktuellsten ist? Wie könnte eine solche Sortierung also aussehen?

            Du brauchst es nicht "überprüfen" - du sagst der Datenbank einfach, "liefere mir die Daten nach folgendem Kriterium sortiert".
            Das machst du mit einer ORDER BY-Klausel im SELECT-Statement.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hallo.

                
              SELECT feld1,feld2,datum FROM tabelle ORDER BY datum DESC;  
              
              

              Wäre das korrekt?

              MfG, Kungschu.

              1. Hello,

                SELECT feld1,feld2,datum FROM tabelle ORDER BY datum DESC;

                
                > Wäre das korrekt?  
                
                so könnte ein entsprechendes SQL-Statement aussehen, ja. Weiterhin könntest du jetzt noch mit der LIMIT-Klausel herumspielen, um die Zahl der Ergebnisse im Rahmen zu halten (sofern das gewünscht ist).  
                  
                MfG  
                Rouven  
                
                -- 
                \-------------------  
                Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)
                
                1. Hallo Rouven.

                  Danke dir.

                  so könnte [...]

                  Gibt es noch andere Möglichkeiten?

                  MfG, Kungschu.

                  1. Hello,

                    so könnte [...]
                    Gibt es noch andere Möglichkeiten?

                    fast immer, das ist das schöne an SQL, es gibt für vieles immer wieder unterschiedliche Schreibweisen.
                    Wobei mit in deinem Fall keine wirklich gängige Alternative (wenn überhaupt eine annähernd sinnvolle) einfällt. Wenn du dein "mehrere Beiträge zur selben Mili-Sekunde"-Beispiel noch aufgreifen willst, dann solltest du noch ein zweites Feld bei der Sortierung mit angeben, also bspw:
                    SELECT titel, autor, datum FROM tabelle ORDER BY datum DESC, titel ASC

                    MfG
                    Rouven

                    --
                    -------------------
                    Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
                    1. Hallo.

                      Dazu noch eine andere Frage:

                      Gibt es eine Möglichkeit, ein Feld Typ-datetime bei jedem neuen Eintrag automatisch füllen zu lassen, sprich, ohne immer erst im Script das Datum zum ermitteln ($date = date("Y-m-d H:i:s");) und mit INSERT INTO einzufügen?

                      Danke euch für eure Beiträge.

                      MfG, Kungschu.

                      1. Hello,

                        Gibt es eine Möglichkeit, ein Feld Typ-datetime bei jedem neuen Eintrag automatisch füllen zu lassen, sprich, ohne immer erst im Script das Datum zum ermitteln ($date = date("Y-m-d H:i:s");) und mit INSERT INTO einzufügen?

                        Yes! Passe das CREATE TABLE so an, dass ein DEFAULT-Wert gesetzt wird, und zwar CURRENT DATE

                        MfG
                        Rouven

                        --
                        -------------------
                        Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)
                        1. Hallo.

                          Damit müsste ich weiter kommen. Danke dir.

                          MfG, Kungschu.

                        2. hi,

                          Passe das CREATE TABLE so an, dass ein DEFAULT-Wert gesetzt wird, und zwar CURRENT DATE

                          Alternativ: Weise den Wert der MySQL-Funktion NOW() (bzw. von einem Alias dieser) zu.

                          gruß,
                          wahsaga

                          --
                          /voodoo.css:
                          #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hello,

    Ich habe mich gefragt, wie man geschickterweise IDs für einzelne Beiträge in einem Blog (oder dergleichen) erstellt, um später mittels der ID auf einzelne Beiträge zugreifen oder Kommentare zuordnen zu können.
    Wie wird das in der Regel realisiert? Gibt es einen Königsweg?

    wie die Bezeichnung "ID" nahe legt, geht es ausschließlich darum, eine eindeutige Kennzeichnung für den Datensatz zu erreichen. Eigentlich alle Datenbanksysteme bringen dafür vorgefertigte Mittel mit, sie heißen teilweise etwas unterschiedlich. Bei MySQL z.B. ist es eine Integer-Spalte vom Typ auto_increment, wobei letzteres angibt, dass beim Einfügen eines Datensatzes automatisch eine Nummer anhand einer dir unsichtbaren Zahlenliste vergeben wird. Wo die herkommt, ist nicht dein Problem. Etwas größer gibt es z.B. noch GUID, die aber auch eine Menge mehr Speicher verbrauchen.

    Noch eine Frage: Wie kann man bei einem Eintrag in eine Tabelle (INSERT INTO) bestimmen, dass der Eintrag am Anfang oder Ende der Tabelle eingefügt werden soll?(Damit später der aktuellste Eintrag stets als erster ausgelesen wird usw..)

    das ist ein grundlegend fehlerhaftes Verständnis einer Tabelle, das dir zugegebenermaßen von Microsoft Access oder auch MySQL suggeriert wird. Eine Tabelle hat keine Reihenfolge, es gibt kein "am Anfang" und kein "am Ende". Der SQL-Server von Microsoft ist ein Paradebeispiel dafür, dass Datensätze die Reihenfolge wechseln können. Wenn Datensätze eine vorhersehbare Reihenfolge haben sollen, dann musst du genau dafür sorgen. Gib ihnen irgendeinen Wert mit, nach dem man sortieren kann, z.B. eine Zeitstempel.

    Eine Anmerkung am Schluss: Viele Leute glauben eine tolle Lösung gefunden zu haben, wenn sie beide Aspekte kombinieren: Auto-Increment und "ich will eine Reihenfolge". Die selben Leute tauchen mit einer gewissen Häufigkeit später hier im Forum auf und fragen, wie sie denn Lücken in ihren IDs loswerden oder Datensätze vertauschen können - daher: Mach gar nicht erst den Fehler. Wie eingangs gesagt, die ID dient ausschließlich der Identifikation, nicht der Reihenfolgenbildung.

    MfG
    Rouven

    --
    -------------------
    Unser Problem ist, dass wir eine Demokratie entwickelt haben, was nicht immer der richtige Weg ist  --  Bernie Ecclestone zu den lästigen Diskussionen um Regeländerungen in der Formel 1
    1. Hallo.

      das ist ein grundlegend fehlerhaftes Verständnis einer Tabelle, das dir zugegebenermaßen von Microsoft Access oder auch MySQL suggeriert wird.

      Da wird es wohl herkommen, ja.

      Wie eingangs gesagt, die ID dient ausschließlich der Identifikation, nicht der Reihenfolgenbildung.

      Ok. Wie kann ich dann klug nach Aktualität ordnen? Die Postings dürfen ja nicht nur irgendwie ausgelesen werden.

      MfG, Kungschu.