bossy: MySQL: Fortlaufende Nummersierung von Datensätzen

Hallo,

habe ein Problem. Hab das halbe Web deswegen durchsucht. Ich möchte ein Feld 'Nummer' haben, dass vom ersten Datensatz bis zum letzten Datensatz ganzzahlig durchnummeriert ist und bei jedem weiteren Hinzufügen eines Datensatzes in der Zelle der Spalte 'Nummer' eine weitere nächsthöhere Nummer automatisch vom System gesetzt wird?

Ich habe eine Tabelle, wo die Datensätze in der horizontalen Ebene keine Beziehung haben. Jede Spalte muss einzeln gefüllt werden und es dürfen keine Lücken zwischen entstehen. Deswegen will ich erst auslesen, wieviel Datensätze in der Spalte vorhanden (in Variable $zeile speichern) sind und dann anhand

"UPDATE ttt.www SET spalte = 'hallo' WHERE words.no =$zeile++;"
(weiß jetzt nicht, ob er $zeile++ so annimmt)

in die Spalte "spalte" an der Stelle $zeile++ speichern.

Aber da brauche ich eine eindeutige Nummerierung in der Spalte 'nummer', die ich abfragen und die sich selber erstellt und wie gesagt beim einfügen neuer Werte um eins automatisch erhöht.

Weiß jemand einen Ansatz, wie man sowas in MySQL automatisiert?

Wenn das nicht geht, gibt es eine Möglichkeit, einen Wert in die Spalte 'spalte' in eine Zeile zu speichern, indem man eine Ganzzahl als Spaltennummer zu speichern ("UPDATE...")?

Vielen Dank,

Bossy :)

  1. Hi,

    Ich möchte ein Feld 'Nummer' haben, dass vom ersten Datensatz bis zum letzten Datensatz ganzzahlig durchnummeriert ist und bei jedem weiteren Hinzufügen eines Datensatzes in der Zelle der Spalte 'Nummer' eine weitere nächsthöhere Nummer automatisch vom System gesetzt wird?

    Warum moechtest du das?

    Warum nummerierst du die Datensaetze nicht ggf. bei der Ausgabe?

    Ich habe eine Tabelle, wo die Datensätze in der horizontalen Ebene keine Beziehung haben. Jede Spalte muss einzeln gefüllt werden und es dürfen keine Lücken zwischen entstehen. Deswegen will ich erst auslesen, wieviel Datensätze in der Spalte vorhanden

    Das ergibt alle recht wenig Sinn ... in einer Spalte sind keine Datensaetze vorhanden.

    "UPDATE ttt.www SET spalte = 'hallo' WHERE words.no =$zeile++;"

    Was genau willst du mit diesem Statement erreichen?

    Aber da brauche ich eine eindeutige Nummerierung in der Spalte 'nummer', die ich abfragen und die sich selber erstellt und wie gesagt beim einfügen neuer Werte um eins automatisch erhöht.

    Mir ist immer noch nicht klar, was genau du willst - und vor allem, wozu es gut sein soll.

    Wenn das nicht geht, gibt es eine Möglichkeit, einen Wert in die Spalte 'spalte' in eine Zeile zu speichern, indem man eine Ganzzahl als Spaltennummer zu speichern ("UPDATE...")?

    Beseitige bitte erst mal das Chaos zwischen den Begriffen Spalte, Zeile und Datensatz in deinem Kopf, welches sich auch hier im Posting niedergeschlagen hat.
    Und dann versuch bitte noch mal, dein Problem - und zwar auch dein *eigentliches* Problem/Aufgabenstellung - so exakt wie moeglich zu definieren.

    MfG ChrisB

    1. In der Tabelle

      table{
        Spalte_1
        Spalte_2
        Spalte_3
      }

      sind die Spalten unabhängig von einander. Die Spalten sind jeweils mit einer url verbunden. Die htmlseite wird dort durchsucht und alle Wörter jeweils einmal in die entsprechende Spalte gespeichert. Damit hat Spalte_1, Spalte_2 und Spalte_3 keine Beziehung zwischeneinander. Sie sind Listen von Wörtern, die aus der der Spalte zugewiesenen URL stammen.

      Bossy

      1. Hi,

        In der Tabelle

        nur um sicher zu gehen: Redest Du von einer Datenbank-Tabelle? Ich gehe in diesem Posting davon aus.

        table{
          Spalte_1
          Spalte_2
          Spalte_3
        }

        Eine _sehr_ unübliche Art, eine solche darzustellen.

        sind die Spalten unabhängig von einander.

        Nein, sind sie nicht.

        Die Spalten sind jeweils mit einer url verbunden.

        Äh? Wie soll denn _das_ gehen? Eine Datenbankstruktur weiß nichts von URLs.

        Die htmlseite wird dort durchsucht und alle Wörter jeweils einmal in die entsprechende Spalte gespeichert. Damit hat Spalte_1, Spalte_2 und Spalte_3 keine Beziehung zwischeneinander. Sie sind Listen von Wörtern, die aus der der Spalte zugewiesenen URL stammen.

        Ich kann mir nicht vorstellen, dass Du von einem Datenbank-Modell sprichst. Falls doch, hast Du entweder eine _extrem_ unverständliche Art, diese zu beschreiben, oder Du solltest es unbedingt über den Haufen werfen, Dich mit den Grundlagen von Datenbanken beschäftigen und es neu machen. Die Bruchstücke, die ich von Deinen Beschreibungen verstehe, funktionieren nicht.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Unter "Spalte_1" kann es sich auch keine URL vorstellen. Aber ein einer anderen Tabelle ist genau Definiert, welche URL Addresse der "Spalte_1" zugewiesen ist. Deswegen besteht kein Zusammenhang zwischen den Werten der Spalte_1 und der Spalte_2! Es sind nur nebeneinander gespeicherte !!LISTEN!!....keine Datensätze!Da ich es nicht in eine Textdate speichern wollte, habe ich MySQL genommen...

          Ja, die Darstellungsweise ist komisch. Ist aber einfach...

          Bossy

          1. Hi,

            Unter "Spalte_1" kann es sich auch keine URL vorstellen. Aber ein einer anderen Tabelle ist genau Definiert, welche URL Addresse der "Spalte_1" zugewiesen ist.

            bei dieser Sätze scheint die Grammatik stimmt so ganz nicht, aber versteht man sie trotzdem. Inhaltlich jedoch ... Wie um alles in der Welt sollte eine Spalte einer _URL_ zugeordnet sein?

            Deswegen besteht kein Zusammenhang zwischen den Werten der Spalte_1 und der Spalte_2!

            Dochdochdochdochdochdochdoch, der Zusammenhang ist unwiderruflich da. Das ist nämlich der *Zweck* von Spalten einer Tabelle. Eine relationale Datenbank ist eine Menge von Verknüpfungen von Mengen, und einige dieser Verknüpfungen finden dadurch statt, dass die Mengen in der selben Tabelle organisiert sind.

            Es sind nur nebeneinander gespeicherte !!LISTEN!!....keine Datensätze!

            Nein, es sind untereinander gespeicherte Datensätze, keine !!LISTEN!!. Was immer !!LISTEN!! sind. Ich nehme mal an, Du meinst Listen. Die sind es *nicht*, denn es sind Datensätze. Garantiert. Egal was Du willst, sagst oder tust. Sowie Du etwas mit INSERT INTO in eine Datenbank-Tabelle speicherst, *ist* es ein Datensatz. Wenn Du die Inhalte eines Datensatzes veränderst, *bleibt* es ein Datensatz. Wenn Du ihn löschst, löschst Du ihn *komplett*, nicht teilweise.

            Da ich es nicht in eine Textdate speichern wollte, habe ich MySQL genommen...

            Auch in einer Datenbank lassen sich Deine Daten in einem brauchbaren Modell speichern. Egal um was für Daten es sich handelt.

            Ja, die Darstellungsweise ist komisch. Ist aber einfach...

            Gut, immerhin ist mir jetzt klar, dass Du tatsächlich von Datenbanken redest.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Ok, wie würdest du dann vorschlagen, Listen zu speichern?

              1. Hi,

                Ok, wie würdest du dann vorschlagen, Listen zu speichern?

                das kommt auf die Art der Liste und ihre zu erwartende Nutzung an.

                Cheatah

                --
                X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
              2. Hello,

                Ok, wie würdest du dann vorschlagen, Listen zu speichern?

                table  url               table wort
                  ============               ============
                  id_url   ------+           id_wort
                  ------         |           -------
                  url            +---------> id_url
                                             lfd_nr
                                             wort

                So könnte das aussehen.
                Für die Reihenfolge der Worte bei der Ausgabe ist die laufende Nummer verantwortlich. Die kann dann fortlaufene mit und ohne Lücken sein. Dafür gibt es hier auch schon ein paar Threads, wie man die mit MySQL möglichst geschickt verwaltet und in einem Statement (damit es eine atomare Operation bleibt) zwei Kandidaten vertauscht.

                Filtern kann man die Tabelle wort nun beliebig über die id_url. Bossy, Du hast dadurch nicht nur "Spalte_1","Spalte_2" und "Spalte_3", sondern beliebig viele Spalten. Den Bezug stellst Du jeweils über die id_url her.

                Ich hoffe, dass Dir das weiterhilft.

                Und darüberhinaus solltest Du Dir trotzdem mal ein Buch über relationale Datenbanken anschaffen. Es lohnt sich immer... :-)

                Liebe Grüße

                Tom vom Berg

                --
                Nur selber lernen macht schlau
  2. Moin,

    wie bereits in den anderen Antworten angedeutet wurde, solltest du dich mit den Grundlagen von relationalen Datenbanken beschäftigen. MySQL ist z.B. eine solche - genauer gesagt eine Datenbankmanagementsystem (DBMS) für relationale Datenbanken.

    Als Einstieg:

    http://de.wikipedia.org/wiki/Relationale_Datenbank

    Speziell zu MySQL:

    Michael Kofler (2007): MySQL 5. Einführung, Referenz, Anwendung. Addison-Wesley Verlag. ISBN 978-3-8273-2636-2.

    Michael Rüttger (2006): MySQL 5 Professionell. mitp Verlag. ISBN 978-3-8266-1596-2

    Zu Datenbanken allgemein:

    Frank Geisler (2006): Datenbanken. Grundlagen und Design. 2. Auflage. mitp-Verlag. ISBN 978-3-8266-1689-1.

    Gunther Saake, Kai-Uwe Sattler (2007): Datenbanken - Konzepte und Sprachen. 3. Auflage. mitp-Verlag. ISBN 978-3-8266-1664-8.

    Das letzte Buch in der Liste ist relativ mathematisch und abstrakt. Es wird als Lehrbuch für Vorlesungen zum Thema Datenbanksysteme verwendet und hat ein recht hohes Niveau. Ohne gute mathematische Kenntnisse (Mengenlehre, Aussagenlogik, Prädikatenlogik) ist das Buch nicht zu empfehlen.

    Gruß

    Stareagle