for...do?

Feldhofe

Erfahrenes Mitglied
Hallo!

Wie mache ich das richtig?
Ich habe eine Tabelle mit den IDs 01 bis 10.
Wenn das Script aufgerufen wird, sollen die Einträge jeweils um -1 nach unten verschoben werden, also der Eintag der vorher bei 10 stand, soll jetzt bei 09 stehen.

Irgendwie kriege ich das nicht so recht hin.

Gruß
Feldhofe
 
die 10. zeile auslesen über eine normale sql abfrage

"SELECT * FROM bla WHERE ID = 10"

und dann die Zeile 9 mit den Daten überschreiben das geht glaube ich mit update, ansonsten ist zeilenaufrücken lassen in datenbanken generell eine sehr undankbare sache und ich würde es wenn es irgendwie geht stets vermeiden
 
Hmm...kann man das nicht irgendwie anders lösen?

Ich will jedenfalls im Chat stets 10 Einträge in der DB stehen haben, von denen bei einem neuen Eintrag der älteste gelöscht wird und alle anderen einen Platz aufrücken...oder sollte man das besser anders machen??

Gruß
Feldhofe
 
Wie wärs wenn du dir bloss die 10 aktuellsten ausgeben lässt?

SELECT FROM Tabelle ORDER BY Timestamp DESC LIMIT 0,10

Gruss
DH
 
Original geschrieben von Der Held
Wie wärs wenn du dir bloss die 10 aktuellsten ausgeben lässt?

SELECT FROM Tabelle ORDER BY Timestamp DESC LIMIT 0,10

Gruss
DH

Hmmm...muß ich dann nicht auch bei jedem Eintag die Zeit miteintragen??
Und außerdem will ich ja auch die alten immer wieder gelöscht haben, sonst quillt die DB ja im Nu über, oder?

Feldhofe
 
Hmmm...muß ich dann nicht auch bei jedem Eintag die Zeit miteintragen??
Und außerdem will ich ja auch die alten immer wieder gelöscht haben, sonst quillt die DB ja im Nu über, oder?

Zu der Sache mit der Zeit: Es bietet sich natürlich an, jedem Eintrag einen Timestamp aufzudrücken wenn er erstellt wird. Aber du könntest das auch über die laufende Nummer (möglicherweise jetzt eh schon dein Primärschlüssel) machen, vorausgesetzt, die neuen Artikel kriegen immer eine neue, noch nicht benutzte ID zugewiesen. Dann Ist der Eintrag mit der höchsten ID auch der aktuellste.

Zum löschen der alten Einträge: Ist auch kein Problem. Du könntest dir ein Miniptrgramm schreiben (10-15) Zeilen, das einfach alle alten Artikel ab nem bestimmten Alter löschet. Auch das über die Timestamp. Du kannst dann sagen, jeder Artikel der älter ist als eine Woche fliegt automatisch raus. Diese Programm kannst du manuell aufrufen, oder z.b. sobald jemand deine Website besucht. Dann werden nur neuere Artikel in der DB verwahrt, die aktuellsten 10 z.B. gibst du sofort aus, den Rest über ein Archiv. Aber keine Sorge, so schnell läuft ne DB nicht über, wenn du sie richtig aufsetzt. Dafür gibts ja Datenabanken, damit du auf die Artikeln die du in JAHREN angesammelt hast zurückgreifen kannst.

Gruss
D.H
 
Achso! :)

Ich dachte, daß die Datenbank schon deutlich lahmer wird, wenn ich in der chat-Tabelle so über ca. 100 Einträge stehen hätte! :eek:

Wahrscheinlich ist es dann wirklich am sinnvollsten, jedem Eintrag eine neue ID zuzuweisen, jeweils die 10 neuesten beim Aktualisieren auszugeben und meinetwegen die mit einer um mehr als 200 kleineren ID löschen...das müßte doch gehen, oder?
Oder macht man das bei Chats grundsätzlich ganz anders?

Eine Frage hab ich aber noch: Was ist mit gleichzeitig geposteten Einträgen? Da dürften doch Probleme auftreten, oder ist das etwas, was man vernachlässigen kann?

Schöne Grüße,
Feldhofe
 
>Ich dachte, daß die Datenbank schon deutlich lahmer wird, wenn ich in der chat-Tabelle so über ca. 100 Einträge stehen hätte! <

nur wenn du Access verwendest :) Spass beiseite, du kannst auch mehr 1000ende Einträge haben, solange die DB vernünftig konzipiert ist und der Server net der lahmste is merkst dus garnicht. Kommt natürlich auch drauf an, wieviele User gleichzeitig draufrumscheuern.

>Wahrscheinlich ist es dann wirklich am sinnvollsten, jedem Eintrag eine neue ID zuzuweisen, jeweils die 10 neuesten beim Aktualisieren auszugeben und meinetwegen die mit einer um mehr als 200 kleineren ID löschen...das müßte doch gehen, oder? <
Klar geht problemlos, aber mach doch lieber noch ne TimeStamp dazu, dann kannst du später noch was einbaueen, z.B. die genaue Zeit wann gepostet wurde, wie lange der Beitrag schon in der DB ist etc.

>Eine Frage hab ich aber noch: Was ist mit gleichzeitig geposteten Einträgen? Da dürften doch Probleme auftreten, oder ist das etwas, was man vernachlässigen kann? <
Du meinst dass die die gleiche ID kriegen? Nee, kann nicht passieren. Wenn du das über Auto-Increment machst kriegt der neue Eintrag immer die höchste Nummer +1. Da die Prozesse nicht *wirklich* parallel in der Datenbank ausgeführt werden kann da also nicht mehrmals gleichzeitg passieren.

Gruss
DH
 
Original geschrieben von Der Held

Du meinst dass die die gleiche ID kriegen? Nee, kann nicht passieren. Wenn du das über Auto-Increment machst kriegt der neue Eintrag immer die höchste Nummer +1. Da die Prozesse nicht *wirklich* parallel in der Datenbank ausgeführt werden kann da also nicht mehrmals gleichzeitg passieren.

Gruss
DH

Danke für deine Antwort!
Du meinst also, daß es am besten ist, ID und Datum/Zeit eintragen zu lassen? Ok, dann mach ich das so!
Mit dem +1 ist klar, aber was meinst du denn mit "auto-Increment"? Was ist denn das genau??


Gruß
Feldhofe
 
Das ist eine Option (oder Eigenschaft, phreaks pleaze correct me :))
die du einem Feld in einer MySQL DB geben kannst. Damit wird das Feld automatisch mit einer um 1 höheren Zahl "vorbelegt". soll genau das Problem das du befürchtest ausmerzen. Kannst du in PHPMyAdmin als Checkbox aktivieren, wenn du neue Felder erstellst.

Und für Datum und Zeit brauchst du nur ein Feld: TIMESTAMP. Das zählt die Sekunden seit beginn der Unix-Epoche (01.01.1970) und daraus kannst du dann Tag, Monat Jahr, Woche, Wochentag Zeit etc. draus generieren.

Greetz
DH
 
Zurück