kostenloser Webspace werbefrei: lima-city


[MySQL] Tabellen-Zeilen neu durchzählen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    erasmuz

    Kostenloser Webspace von erasmuz, auf Homepage erstellen warten

    erasmuz hat kostenlosen Webspace.

    Hallo alle miteinander,

    ich versuche gerade wieder etwas mit MySQL zu spielen und stehe jetzt vor folgendem Problem:

    Ich habe eine Tabelle mit folgenden Spalten:
    VORNAME NAME EMAIL BLA1 BLA2 BLA3 ID

    ID habe ich auf Auto-Increment gestellt, sodass jede Zeile bei anlegen eine ID-Zahl bekommt. Das Problem ist nur:
    Wenn ich jetzt eine Zeile wieder lösche, dann bleiben trozdem die IDs so, wie sie davor sind, also beispielsweise
    1, 2, 3, 5, 6, 7 weil die 4 gelöscht wurde.

    Ich hätte aber gerne wieder 1, 2, 3, 4, 5, 6 da ich für die Benutzerverwaltung eh eine Unique-ID verwende (BLA1) die von woanders festgelegt wird. Nur ist es für mich aufwändiger die Daten nicht einfach per ID abrufen zu können, die ich beliebig hoch und runter zählen kann. Ich hoffe ich versteht, was ich meine.

    Natürlich hab ich auch schon etwas gegoogelt und bin dabei auf Befehle wie "ORDER BY" in einem UPDATE-Befehl gestoßen, aber da ich grade erst mit MySQL Anfange kann ich damit natürlich noch nicht so recht etwas anfangen, da die Erklärungen teilweise nicht so gut sind bzw gänzlich fehlen und das in Beispielen, die sich sehr stark von meinem unterscheiden...

    Vielen Dank schonmal :thumb:

    //Edith Zeilen

    Beitrag zuletzt geändert: 29.4.2009 15:24:14 von erasmuz
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Naja, Auto-increment dauernd neu aufzubauen ist nicht sonderlich sinnvoll. ;)

    Lösungsansatz:

    für Listenausgabe:

    select * from table LIMIT 5,10;  # Zeilen 6-15 ausgeben


    für einen einzelnen Datensatz:

    select * from table LIMIT 5,1;  # den 6. Datensatz ausgeben






  4. Ähm na wenn du kein auto_increment brauchst und die IDs ehh von woanders her bestimmt werden, dann kannst du auch das auto_increment entfernen ;-)
    Allerdings wenn die IDs von woanders her übermittelt werden und du deine Datenbank auf diese IDs aufbaust, darfst du bei JEDER Nutzeränderung auch deine Datenbank reorganisieren. Sonst stimmt nämlich keine einzige Tabelle mehr.

    Aus diesem Grund nutze ich meist eigene IDs (mit auto_increment) und gebe in einer seperaten Spalte die Fremd-IDs an. Somit kann ich meine Daten immer einer Person zuordnen und diese Person hat halt eine X Fremd-ID.

    Ok nochmal als Ergänzung...
    Falls du folgende Datenbank hast:

    Personen (pid, FremdID, Name, Vorname, ...);
    Bücher (bid, titel, author, ...);
    Ausleihen (aid, pid, bid, ...);

    und du jetzt pid anpassen willst, weil es "schick" aussieht, dann heißt dass dass du auch Bücher und Ausleihen anpassen müsstest ;-) und somit die gesamte DB reorganisieren mußt. Sorry aber "Das macht kein Mensch" und es macht auch keinen Sinn.
    Demzufolge "muß" deine ID immer gleich bleiben, egal ob da Personen rausgelöscht werden oder nicht!

    Grüßle

    Beitrag zuletzt geändert: 29.4.2009 16:23:02 von scout
  5. Ich hatte erasmuz so verstanden, daß er einen Weg sucht,auf Datensätze einer Tabelle in einfacher Weise sequentiell zuzugreifen.

    Eine eindeutige Zuordnung ist mit "LIMIT" natürlich nicht möglich.

    Strange, dein Beispiel zeigt den Aufbau einer Realtion anschaulich, aber wo liegt dort der Nutzen der Fremd-ID. Hinter aid, bid und pid vermute ich doch Auto-Incremente.

    *ball zu erasmuz werf* Was willst Du denn genau erreichen?
    [ ] 1. Eine fortlaufende Ausgabe einzelner oder mehrerer Datenbankeinträge nach Eingabereihenfolge
    [ ] 2. Ausgabe eines Datensatzes anhand einer speziellen id
    [ ] 3. Eindeutige Referenzierung eines Datensatzes in einer anderen Tabelle

    LIMIT wäre für Fall 1 verwendbar. Für 2 oder 3 kannst Du, sofern kein anderes eindeutiges Identifikationsmerkmal vorliegt auf die eindeutige id nicht verzichten. Die Probleme, die eine Neuvergabe bereiten würde, hat strange ja bereits beschrieben.


    BTW: Für eine sortierte Listenausgabe lägest Du mit "ORDER BY" schon richtig.

    ein
    select email from table ORDER BY name;


    würde dir z.B. eine Liste der Emailadressen in der alphabetischen Reihenfolge der Namen geben.

    ein zusätzliches
    WHERE feld=wert

    beschränkt die Ausgabe auf die Datensätze deren Feld Wert enthält

    dazu noch ein
    LIMIT 23,10

    würde die Ausgabe der passenden Datensätze auf 10 Ergebnisse, beginnend mit dem 24. Datensatz, beschränken.
    Ein Verzicht auf ,10 resultiert in einer Ausgabe aller passenden Datensätze ab dem 24.

    EDIT: typo

    Beitrag zuletzt geändert: 29.4.2009 17:05:23 von fatfreddy
  6. Autor dieses Themas

    erasmuz

    Kostenloser Webspace von erasmuz, auf Homepage erstellen warten

    erasmuz hat kostenlosen Webspace.

    Erstmal danke euch allen.
    Das mit den einzigartigen IDs war mir anfänglich nicht so klar, ich wollte einfach nur ein eine Sammlung an Daten mit einfachen zugriff (eben einer fortlaufenden Nummer) haben, von denen man auch einfach eine löschen kann, die anderen "rücken dann nach" eben wie in einem Tabellenkalkulationsprogramm.

    Ich habe mich jetzt, wie ja bereits empfohlen, für die einzigartigen IDs entschieden, jetzt besitzt mein Programm einfach ein Array mehr, ich musste nur den durchsuch-Algorythmus etwas verändern.
    Die Tipps werde ich mir auf jedenfall merken, soetwas braucht man sicher irgendwann nochmal...

    Soweit ist die Sache damit hier geklärt :)
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!