MySql: Wie oft wurde ein Eintrag aufgerufen?

chill1976

Neuer Benutzer
Beiträge
3
Hallo Zusammen,

habe für mein Problem bisher keine Lösung gefunden.
Eigentlich ist meine Vorhaben recht einfach. Ich möchte lediglich wissen wie oft ein Eintrag in einer Datenbank mit "Select" aufgerufen wurde.

Ich stelle mir das so vor:
- Jeder Eintrag hat eine Spalte "Aufrufe" mit Startwert 1 oder 0
- sofern ein Eintrag aufgerufen wird, erhöht sich sein Wert in der Spalte "Aufrufe" um 1.

Kann doch nicht so schwer sein... hoffe ich!
smile.png


Vielen Dank vorab und Gruß
Dirk
 
Werbung:
Machbar. Aber nicht so einfach wie Du denkst. Ein SELECT verändert keine Daten. Um das, was Du willst zu erreichen müßtest Du:

  • Zugriffe, also Selects, auf die Tabelle verbieten (Revoke)
  • eine Funktion (Security Definer) als Superuser schreiben, die a) einen (oder mehrere) Records zurückliefert und b) den Counter der betroffenen Records erhöht
  • Deine Applikation so umschreiben, daß diese diese Funktion nutzt, und kein direktes SQL mehr
    [/code]
 
Btw, es stellen sich weitere Fragen.

  • was soll passieren, wenn der Datensatz lediglich Teil einer Aggregation ist?
  • was soll passieren, wenn der Datensatz Teil eines Subselects ist, welcher aber in einer höheren Ebene von der Ergebnissmenge ausgeschlossen wird?
Zu was soll das einklich gut sein?
 
hört sich kompliziert an, und ist es wohl auch ;-)

Muss nicht zwingend über "Select" ausgelöst werden, war nur so eine Idee. Im Kern geht es mir nur darum, dass man irgendwie abfragen kann, wie oft ein Eintrag aufgerufen wurde... Vielleicht geht ja sowas über eine Statistik funktion der Datenbank, die man 1x pro Stunde laufen lassen kann? Der Wert aus der Statistik könnte man ja dann in irgendwie in die Spalte "Abfrage" eintragen?

Ziel soll sein, dass ich die Anzahl der Aufrufe später mit dem Standard Select-Befehl gleichzeitig mit abfragen kann.
 
PostgreSQL hat Statistiken, wie viele Seq-Scans und Indexscans es über eine Tabelle gab. Diese dienen auch einem Zweck (aber nicht dem, was Dir vorschwebt). Damit ist aber noch nicht bekannt, welche Datensätze wie oft gelesen wurden. Ob MySQL vergleichbare Statistiken hat weiß ich nicht - was auch egal ist, sie liefern nicht das, was Du suchst. Statistiken darüber, wann und wie oft ein jeder Datensatz gelesen würde wären sicher nett - in den Augen der Hersteller von Festplatten.

Noch einmal: zu was außer einem Schwanzvergleich der Anzahl der Aufrufe soll das gut sein?

Ach ja: Du hast einen Datensatz mit 2 Spalten, id (primary key) und value. Du trägst heute ein: (1, 20). Heute kommen 5 Selects. Morgen änderst Du value auf 30, und es kommen morgen 12 Selects. Auf was soll Dein Counter stehen? Und was soll passieren, wenn Du den PK änderst? Und was, wenn da kein PK ist? Und was soll mit zurückgerollten Transaktionen passieren, in denen der Record an eine Applikation ausgeliefert wurde? Benutzer nachträglich liquidieren, weil er zuviel weiß? Und wie willst Du das zählen, wenn Du neben dem Master noch 4711 Standbys hast, die vom Master repliziert die Daten ausliefern?

Mir fallen schneller Fragen ein, als Du beantworten kannst ....
 
Werbung:
Es soll nicht mehr als eine Anzeige sein um zu sehen wie oft ein Eintrag aufgerufen wurde. Ich möchte diesen Wert später dem Nutzer anzeigen, sodass er sieht wie oft ein Eintrag schon aufgerufen wurde. -> Quasi sowas wie ne "Headmap "

Ob jetzt Ereignisse wie Update mit berücksichtigt werden oder nicht, wäre erst mal weniger wichtig.
 
Zurück
Oben