Neuester SQL-Eintrag soll ID=1 bekommen

Hallo!

Ich möchte gerne eine Seite erstellen, auf der Täglich News eingetragen werden. Auf der Startseite sollen aber nur die neuesten fünf angezeigt werden. Der Rest soll in einem Archiv abzurufen sein.
Technisch soll das so gehen, dass beim Eintragen in eine MySQL-Datenbank der neueste Eintrag immer die ID 1 zugewiesen wird und die anderen IDs jeweils um einen erhöht werden. So kann mit einem einfachen Script die Startseite immer die Datensätze 1-5 auslesen.

Wer weiß Rat? Vielen Dank schon mal!

Simon

Hallo Simon,

ich fürchte, daß Du das nicht so ohne weiteres hinbekommen wirst. Du mußt ja dann jedes Mal, wenn ein neuer Eintrag in die News geschrieben wird, allen bisher vorhanden News eine neue ID zuweisen. Das ist vergleichsweise aufwendig zu programmieren. Viel einfach ist es, wenn Du jedem Datensatz ein Gültigkeitsdatum zuweist und in der Newsabfrage einbaust, daß nur die Datensätze angezeigt werden sollen, deren Gültigkeitsdatum noch nicht erreicht sind. Alle anderen werden dann im Archiv angezeigt. Damit werden dann nur die Nachrichten angezeigt, die wirklich noch aktuell sind. Als Beispiel, bei dem das so realisiert ist, kannst Du Dir ja mal unsere Seite unter http://www.tu-bs.de/cgi-fb7/index2.php anschauen.

Bis denn dann,

Felix

Schwierig wär es nicht wirklich… lass einfach eien Query vorher los mit

UPDATE tabelle SET ID = ID + 1

bevor du einfügst…

aber wie der andere Antwortende halte ich von dieser Idee auch gar nichts… mach es lieber über ein Datumsfeld und sortiere die Abfrage danach absteigend

vielen Dank für die Tipps!
Leider habe ich das Problem, dass das Layout für die Startseite fest steht, das heißt, dass es sich nicht um eine einfache Tabelle handelt, sondern um Absatzformatierungen, die leider nicht so einfach aufgebaut werden können (daher wäre das mit den IDs einfach gewesen).

Ich werde mal schauen, ob sich das lösen lässt

Simon

Hallo Simon,

ich mache das auf meiner Seite genauso.

Es werden immer die neuesten 5 Newsartikel angezeigt.
Die Artikel werden der Reihe nach in die Datenbank eingegeben.

Das erledigt der folgende SELECT-Befehl:

"SELECT \* FROM News ORDER BY NewsDate DESC, NewsId DESC LIMIT 5"

Es werden sogar ältere News angezeigt, wenn ich ein Update gemacht habe und nur das Datum ändere!

Grüße,
Bernd.
http://www.cdr-forum.de/

Moin Simon,

wieso versucht Du nicht einfach statt ID 1 bis 5 auszulesen, die Datensätze MAX(ID) bis MAX(ID)-5 auszulesen. Es ist einfacher die ID zu erhöhen und nur die 5 größten Einträge auszulesen, als alle Einträge um 1 zu verschieben in der Tabelle.

SELECT MAX(ID) AS ID_max FROM tabelle
SELECT * FROM tabelle WHERE ID >= (ID_max-5)

Vielleicht klappt es ja so :smile:

CU
Clemens Meier

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hmmmmm,
irgendwie will der nicht die maximale ID auslesen.
Ich habe mich da mal ein wenig umgehört und mitbekommen, dass der Befehl max() immer mehrere Parameter, die durch Komma getrennt werden, in den Klammern stehen haben muss. Aber auch dann funzt es nicht :frowning:
Scheinbar liest PHP nicht die maximale ID aus.
Kann vielleicht jemand mal ein funktoinierendes Beispielscript geben?

Vielen Dank!
Simon

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Simon,

das Beispiel das ich gepostet habe wird genau diese Aufgabe erfüllen. Die jeweils 5 letzten Newsartikel aus der Datenbank holen.

"SELECT \* FROM News ORDER BY NewsId DESC LIMIT 5"

DESC fängt beim neuesten an und LIMIT 5 gibt die Anzahl der Datensätze an.

Warum so kompliziert wenn es auch einfach geht? :smile:

Grüße,
Bernd.
http://www.cdr-forum.de/

Hallo Bernd!

Vielen Dank für den Tipp! Nachdem das jetzt ja so wunderbar funktioniert würde mich noch interessieren, wie es möglich ist, unter Zuhilfenahme dieses Befehls den vorletzten oder drittletzten Eintrag herauszufiltern. Das sollte doch auch möglich sein, oder?

Vielen Dank!
Simon

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Simon,

das müßte z.B. so gehen in dem Du Dir die Anzahl der Datensätze mit

$number = mysql\_num\_rows($result)

ausgeben läßt. Wobei $number die Zahl enthält und dann weiter verarbeitet werden kann. Also nach dem Motto

$NewsId = $number-1;

und dann einen neuen Select-Befehl der so aussehen könnte:

"SELECT \* FROM News WHERE NewsId = $NewsId"

Damit bekommst Du den vorletzten Eintrag zurück. Eine ähnliche Methode verwende ich um in den Newsartikeln vor und zurück zu blättern.

Grüße,
Bernd.
http://www.cdr-forum.de/