WinFuture-Forum.de: [php/mysql] Begrenzte Anzahl An Einträgen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php/mysql] Begrenzte Anzahl An Einträgen


#1 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.475
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 17. Mai 2005 - 23:07

Hallo zusammen.

Ich habe da eine kleine Frage zur Eintragung in die Datenbank mit PHP.
Und zwar will ich nur eine bestimmte Anzahl an Eintragungen bestimmen.
Sprich: ich lasse also irgendwelche Daten in die Datenbank eintragen und sobald 100 Einträge vorhanden sind (wird anhand der ID gezählt), dann soll er immer die älteste überschreiben, so dass es nie über 100 werden.

Also ich stelle mir da so was vor:
Wen man etwas in die DB einträgt wird mit einer IF-Abfrage überprüft, ob die Anzahl in der DB größer ist als 100 - dann wird das älteste gelöscht und danach erfolgt der neue Eintrag.
Falls die Zahl niedriger als 100 ist, wird gleich eingetragen.

Das müsste eigentlich möglich sein, da ich ja mit PHP rechnen und die Anzahl aus der DB zählen kann.
Nur wie funktioniert das dann mit dem ältesten löschen und dass er dann gleich weiter einträgt?

Ich brauche das für viele Dinge.
z.B. als IP-Sperre, Shoutbox...

Ich hoffe nur, dass man das auch ohne Cronjob lösen kann, einfach via PHP oder so. Weil er soll es ja nur überprüfen, wenn eingetragen wird.

Ich wäre euch also sehr dankbar, wenn ihr mir helfen könnt (und bitte immer mit dazugehörigem Script/Code wenn's geht) - DANKE!

Grüße,
Adi.
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

Anzeige



#2 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 18. Mai 2005 - 06:45

Zuerstmal: Zählen per ID halte ich für ungeeignet. Wie man richtig zählt:

SELECT count(*) FROM tabelle


Damit kannst du die Anzahl der Zeilen rausfinden. Wenn du jetzt die letzte Zeile löschen willst, funktioniert es glaube ich sogar schon mit diesem einfachen Befehl.
DELETE FROM counter_ips LIMIT 1


Ansonsten finde einfach die Zeile mit der höchsten ID/Zeit heraus

SELECT max(id) FROM tabelle


und lösche diese Zeile dan auf herkömmliche Weise. Das hinzufügen einer neuen Zeile dürfte dann nicht das Problem sein.

Dieser Beitrag wurde von Floele bearbeitet: 18. Mai 2005 - 06:46

0

#3 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.475
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 18. Mai 2005 - 16:56

Danke @Floele.
SO hatte ich es mir vorgestellt.
Werde es dann auch mal probieren.
Ich habe bisher immer "mysql_num_rows" für das Zählen benutzt, aber geht das mit "count(*)" auch einfach?

Und der Befehel bei "SELECT max(id) FROM tabelle" funktioniert, dass er mir die höchste ID findet?
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#4 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 18. Mai 2005 - 17:27

Zitat

Ich habe bisher immer "mysql_num_rows" für das Zählen benutzt, aber geht das mit "count(*)" auch einfach?


Damit zählst du nur die Zeilen, die bei einem SELECT etc. zustande gekommen sind.

Zitat

Und der Befehel bei "SELECT max(id) FROM tabelle" funktioniert, dass er mir die höchste ID findet?


Ja. Es geht natürlich auch noch anders, wie

SELECT id FROM tabelle ORDER BY id DESC LIMIT 1

0

#5 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.475
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 18. Mai 2005 - 17:48

@Fleole

Aber bei "SELECT id FROM tabelle ORDER BY id DESC LIMIT 1" zähle ich ja nicht, wie viele vorhanden sind, sondern da zeigt es mir nachher die letzte an?

Und soll ich dann nachhe rbei der Überprüfung mit einer IF-Abfrage rechnen lassen und dann löschen oder geht das so einfach mit "DELETE FROM counter_ips LIMIT 1" und dann trägt er mir die neue ein?
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#6 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 18. Mai 2005 - 18:04

Zitat (Corey: 18.05.2005, 18:48)

@Fleole

Aber bei "SELECT id FROM tabelle ORDER BY id DESC LIMIT 1" zähle ich ja nicht, wie viele vorhanden sind, sondern da zeigt es mir nachher die letzte an?


Ja, genau wie max(id).

Zitat

Und soll ich dann nachhe rbei der Überprüfung mit einer IF-Abfrage rechnen lassen und dann löschen oder geht das so einfach mit "DELETE FROM counter_ips LIMIT 1" und dann trägt er mir die neue ein?
<{POST_SNAPBACK}>


Was neues eintragen tut er erstmal garnicht. Erst löschen, dann eintragen :angry:
0

#7 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.475
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 23. Mai 2005 - 18:12

@Floele
So wie du es geschrieben hast, ging es nicht ganz :D

Schau mal hier:
[php/mysql] Flood-kontrolle Für Alle Zwecke
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#8 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 23. Mai 2005 - 21:26

Willst du etwa nicht auf urza hören? :D
0

#9 _PelzigesWaldtier_

  • Gruppe: Gäste

geschrieben 24. Mai 2005 - 01:34

Bitte beachtet aber, dass der Eintrag mit der niedrigsten ID nicht der aelteste Eintrag sein muss. Wenn Datensaetze manuell geloescht werden, dann kann schon mal ganz schnell die Ordung durcheinandergebracht werden.

Ich wuerde daher also folgendes empfehlen: Generell fuer jeden Eintrag das Erstellungsdatum mitspeichern. Eintraege, wie schon gesagt, mit count(*) zaehlen und, wenn mehr als 100 Eintraege vorhanden sind, die ID des aeltesten (Kleinestes Erstellungsdatum) Eintrags abrufen und diesen Datensatz mit den neuen Daten aktuallisieren (UPDATE-Statement - Erstellungsdatum aktualisieren nicht vergessen!).

So umgeht man moegliche Probleme, die durch Unstimmigkeiten der IDs entstehen koennten.

Gruesse,
PelzigesWaldtier

Dieser Beitrag wurde von PelzigesWaldtier bearbeitet: 24. Mai 2005 - 01:54

0

#10 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.475
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 24. Mai 2005 - 11:36

@PelzigesWaldtier

Danke!
Also normal macht mir das keine Probleme mit der ID, aber ich kann es mir schon vorstellen. Den Zeitstempel habe ich schon mit eingetragen (brauche ich ja dann für die Flood-Kontrolle...
Wie muss denn dieser count(*) Befehl genau aussehen, damit er auch funktioniert.
Bei mir gibt er immer "Ressource id #4" oder sowas raus...?!
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#11 _Benjamin_

  • Gruppe: Gäste

geschrieben 24. Mai 2005 - 13:33

$sql = "SELECT COUNT(*) FROM datenbank";

was funktioniert da bei dir nich ?
0

#12 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.475
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 24. Mai 2005 - 15:09

Zitat (Xandros: 24.05.2005, 14:33)

$sql = "SELECT COUNT(*) FROM datenbank";

was funktioniert da bei dir nich ?
<{POST_SNAPBACK}>

Ich versuche es später noch einmal, bei mir hat er da keine Zahl ausgegeben, sondern irgendwas von "Ressource id #4" oder so...
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#13 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 24. Mai 2005 - 15:28

*hust*
Also du musst da schon den üblichen Wert über $myrow = mysql_fetch_row($result) gehen.

Dieser Beitrag wurde von Floele bearbeitet: 24. Mai 2005 - 15:28

0

#14 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.475
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 24. Mai 2005 - 15:39

Ach so ist das :blink:

Dann also:
$sql = mysql_query("SELECT COUNT(*) FROM datenbank");

$row = mysql_fetch_row($sql);


Und dann kann ich mit echo $row; die Zahl ausgeben und damit rechnen?

Dieser Beitrag wurde von Corey bearbeitet: 24. Mai 2005 - 15:41

Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#15 _Benjamin_

  • Gruppe: Gäste

geschrieben 24. Mai 2005 - 16:17

echo $row[0];

glaube ich so war das :blink:
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0