SQL Besucherzähler mit IP-Sperre

  • Ersteller Ersteller Mr. Snoot
  • Erstellt am Erstellt am
M

Mr. Snoot

Gast
Hio,

ich hab eine MySQL-Tabelle mit den Feldern id, inhalt, besucher (= Counter). Wie richte ich für den Counter am besten eine IP-Sperre ein? Ich will keine generelle Sperre der IP, sondern nur in der jeweiligen Zeile, die abgerufen wurde.
DB-Aufbau
db_struktur.JPG

Wäre es jetzt sinnvoll, a) noch ein Feld, bspw. ip, hinzuzufügen, um dort irgendwie jede IP + Timestamp zu speichern (also so: ip1|timestamp1;ip2|timestamp2;ip3|timestamp3;...) oder wäre b) eine eigene Tabelle sinnvoll, wo ich die Felder ip, timestamp und korrespondierende id eintrage (alte IPs würde ich dann via Cronjob nach 24h löschen).


a) finde ich eigentlich zu umständlich, weil ich immer irgendwie das Feld nach IP durchsuchen müsste.
b) ist für nen einfachen Zähler aber wohl etwas overpowered und ich müsste jedesmal zwei Tabellen abfragen (1. Tabelle um Inhalt auszugeben; 2. Tabelle für Zähler).
 
Zuletzt bearbeitet:
Also ein Besucher soll sich den einzelnen Inhalt nur eine bestimmte Anzahl mal oft ansehen?
In einer Tabelle lassen.
Die Abfrage machen, wie als wäre es zulässig und dann per Prüfung danach den Inhalt (nicht) anzeigen.
Also
Code:
select * from tabelle where inhalt = ?

if(erg[besucher]>max_count&&ip==erg[ip]
die("Zu oft aufgerufen");

else
...
 
Ja ne, soll einfach ein primitiver Besucherzähler sein; keine Sperre um die Seite nicht mehr anzuzeigen.
 
Schau dir mal diesen Zähler hier an, ist schön einfach gehalten, und braucht lediglich ein Textfile, also keine Datenbank.
 
Ja, so einen Counter hät ich auch hier, aber ich dachte, wo die DB schonmal da ist, könnte man das auch hierüber einfach erledigen.
 
ok, jetzt hab ichs verstanden.
Das ist eine 1:n Beziehnung.
-> Zwei Tabellen.
1. Tabelle wie gehabt, 2. mit (inhaltsid,ip,timestamp)
Dann ein trigger, der bei einem insert die erste tabelle entsprechend abändert.
Code:
create trigger trig 
insert on 
tab2
begin 
update tab1 
counter = counter+1 
where 
(
select count(*) 
from tab2 
where ip=ip and timestamp > "now" - 24*3600 
and 
inhaltsid=new.inhaltsid
)
IS NOT NULL 
OR rollback;
end
Ohne Garantie, aber sollte gehen :)
Verwendung: INSERT into tab2 inhaltsid,ip,timestamp
 
Zurück
Oben