auto_inc werte in abhängigkeit von einem anderen atribut
montgomeryb
- datenbank
0 montgomeryb0 Ilja0 montgomeryb0 Ilja
hi!
ich wollte mir ein kleines Log tool um das verhalten der user mitzulogen erstellen, da ich aber nichts zufriedenstellendes gefunen habe, wollt ich es "mal eben schnell" selbst machen (mit PHP und MySQL)
ich hab 2 tabellen:
unique_hits:
id (mediumint, unsigned, auto_inc, Primärschlüssel)
[...]
stats
id (mediumint, unsigned, auto_inc, Primärschlüssel/Fremdschlüssel)
aktion_nr (mediumint, unsigned, Primärschlüssel)
[...]
in stats schreib ich jeden einzelnen seitenaufruf rein, in unique_hits nur wenn ich in den letzten 20 min. keinen datensatz mit gleicher ip/host in stats finde
damit ich aber die logs in stats besser verwalten kann schreib ich die id von unique_hits auch in stats und hab dann ein 2. atribut aktion_nr das die nr. der aktuellen aktion vom user beinhalten sollte
d.h. wenn jemmand meine seite besucht bekommt er einen datensatz in unique_hits mit der id 1 und mehrere in stats mit der id 1 und der jeweiligen aktions nr.
zb. jemmand besucht die seite und klick nach der reihe auf menüpunkt1 menüpunkt2 menüpunkt3
dann sollte es so aussehen
unique_hits:
und stats:
Datensatz:
id: 1
aktion_nr: 1
aktion: startseite aufrufen
Datensatz:
id: 1
aktion_nr: 2
aktion: auf menüpunkt1 drücken
Datensatz
id: 1
aktion_nr: 3
aktion: auf menüpunkt2 drücken
Datensatz
id: 1
aktion_nr: 3
aktion: auf menüpunkt3 drücken
meine frage ist jetzt wie ich es schaffe das er bei aktion_nr immer raufzählt, aber nur für die aktuelle id (auto_inc ist ja sozusagen 'global')
hoffe ich konnte meine frage verständlich formulieren
thx!
könnte es vllt. so gehen:
SELECT COUNT(*) FROM stats WHERE id=1 GROUP BY id
dem ergebniss addier ich 1 hinzu und verwende es als aktion_nr für den nächsten datensatz
yo,
SELECT COUNT(*) FROM stats WHERE id=1 GROUP BY id
nein, das würde nicht gerade zu deinem gewünschten ergebnis führen. das einzige, was für dich wichtig ist, dass du die ID der ersten tabelle behälst und als fremdschlüssel bei der zweiten tabelle einträgst. auch solltest du deine zweite tabelle ein wenig ändern.
das ist besser und übersichtlicher, der primärschlüssel (aktion_nr) der zweiten tabelle kann einfach mit autoincrement hochlaufen.
was wichtig ist, mit php die ID der ersten tabelle zu merken und dafür gibt es eine nützliche funkion unter php, wenn ich mich nicht täusche heißt sie last_insert_id().
Ilja
auto_inc atribute steigen aber auch wenn ein neuer unique_hits_id angefangen wird (und für diesen noch reichlich niedrigere werte verfügbar sind)
ich will das unique_hits_id und aktion_nr _gemeinsam_ einzigartig sind, und für jeden unique_hits_id bei aktion_nr von anfang an gezählt wird (0 oder 1 - ist nicht so wichtig,...)
yo,
ich will das unique_hits_id und aktion_nr _gemeinsam_ einzigartig sind, und für jeden unique_hits_id bei aktion_nr von anfang an gezählt wird (0 oder 1 - ist nicht so wichtig,...)
man sollte sich vor augen halten, was für eine beziehung du mit den beiden tabellen hast. es ist eine klassische 1:n beziehung. und da ist es nun mal so, dass der fremdschlüssel in der n tabelle enthalten ist, in deinem falle die unique_hits_id. und die eindeutigkeit der zweiten tabelle ist damit gegeben, dass eben ein autoincrement aktion_nr mitläuft. ich würde deine vorstellung, dass die beiden zusammen einen einzigartigen schlüssel bilden verwerfen, da es überflüssig ist. es macht nur arbeit und bringt keine vorteile.
Ilja