[MySQL] Tabellen-Zeilen neu durchzählen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anpassen
ausgabe
ausgeben
ausleihe
auto
befehl
bleiben
code
datenbank
datensatz
datum
feld
limit
ordern
person
strang
tabelle
url
vorname
zeile
-
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
//Edith Zeilen
Beitrag zuletzt geändert: 29.4.2009 15:24:14 von erasmuz -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi !
Das hab ich gefunden, vielleicht hilft dir es ja: http://www.phpforum.de/archiv_48826_IDSpalte@AutoincrementFeld@neu@durchzhlen_anzeigen.html -
Ä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 -
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 -
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 :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage