Suche Hilfe Mysql Datenbank, IDs neu durchnummerieren?

Danielo30

Grünschnabel
Hallo Liebe Tutorial.de Community,

Ich habe folgendes ich habe in meiner Mysql Datenbank eine Tabelle die folgendermasen aufgebaut ist.

Tabelle: posts
Spalten: id | timestamp | titel | post

nun wurden die id's durchnummerriert, und der titel ist = der id (das soll auch extra so sein) weil ich folgende befehl in der datenbank ausgeführt habe.

UPDATE posts SET titel = REPLACE(id, '', '');

so, nun wenn ich aber zB die ersten 50 posts lösche, dann fängt er ja bei 51 an zu zählen, und 51 wäre dann der älteste post, gibt es eine möglichkeit das er die posts nochmal neu durchnummeriert von 1 aus, und sich am timestamp orientiert?

Ich hoffe mein anliegen ist einigermassen zu verstehen.

Vielen Lieben Dank schonmal, ihr würdet mir wirklich sehr helfen.
 
Das geht nur manuell mit einem UPDATE, außerdem sollte die id ja auch als Fremdschlüssel in anderen Tabellen taugen, wie machst du das wenn du den Schlüssel fortlaufend änderst?
Nichts für ungut aber das System das du verfolgst klingt nicht wirklich sinnvoll, sondern eher nach ner Umgehung der Regeln für ein gutes Datenbankdesign.
 
In einem Punkt muss ich Cojote zustimmen und fragen: "Warum?"

Aber ungeachtet dessen kannst du deine 50 Einträge löschen, danach die Spalte mit der ID löschen und gleich darauf wieder anlegen mit gleichen Eigenschaften (auto_increment nicht vergessen). SQL wird dann von selbst wieder ab 1 hochzählen.

Code:
ALTER TABLE `tabelle` DROP `ID` ;
ALTER TABLE `tabelle` ADD `ID` MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST ;
 
Vielen Dank euch beiden.

Fremdschlüssel in einer anderen Tabelle gibt es nicht, weil es eigentlich nur die Tabelle posts in der Datenbank gibt.

Nun der Code den ZodiacXP gepostet hat funktioniert schon ganz gut, vielen dank ZodiacXP.

Nur wie erweitere ich den Code nun das er mit das Timestamp beachtet, und nach Timestamp durchnummeriert.

So sehen zB die Timestamps der einzelnen Posts aus:

1218924180
1218924120
1218924240
1218924300

oben wär der neuste posts (vom datum her gesehen)

Wär echt klasse wenn mir dafür noch jemand den Befehl sagen könnte. ;-)

Vielen Dank schoneinmal :)
 
Hm. Also ich war die letzten Stunden unterwegs, deswegen jetz erst eine Antwort:

Also, das würde ich mit meinem kleinen SQL-Wissen nur über eine Temporäre Tabelle hinkriegen.

  • Temporäre Tabelle anlegen mit CREATE TABLE
  • dabei ist schon ein PRIMARY KEY mit auto_increment in der temporären Tabelle
  • dann ein INSERT mit SubQuery:
Code:
INSERT INTO `temp_tabelle` (`felder_ohne_id`) VALUES (
  SELECT `nochmal_felder_ohne_id`
  FROM `original_tabelle`
  ORDER BY `timestamp_feld` ASC
)

oder auch DESC. guck mal ;)

Danach noch Originaltabelle löschen und temporäre Umbenennen in den Namen der ursprünglich Originalen.

Aber ganz ehrlich? Hoffe das brauchs du nur einmal in der Woche ;) weil so langsam wirds schon wild.
 
Zuletzt bearbeitet:
Hallo Zodiac, Vielen Dank erstmal

Leider komm ich bei deiner lezten Beschreibung nicht weiter, weil ich Mysql eigentlich überhaupt nicht behersche.

Kannst du mir bitte die genauen Commands dazu schreiben die ich im Query fenster ausführen muss?

Vielen Dank schonmal
 
Also ich werd Lehrer... Das würd ja gegen meine Grundprinzipien verstoßen :D

Naja, hab ja schon einiges geschrieben. Bei den anderen müsste man wissen wie deine Tabellen genau aussehen. Von daher:

CREATE TABLE http://sql.1keydata.com/de/sql-primaerschluessels.php
INSERT INTO http://sql.1keydata.com/de/sql-insert-into.php
(das ist nicht meine Seite! ich würde nie : "Primärschlüssels" schreiben ^ ^)

Am besten mal lesen und währenddessen in phpMyAdmin rumprobieren mit Testtabellen.
SQL wirst du noch sehr sehr oft brauchen.

Have fun.
 
Zurück