[MySQL] Struktur für Statistik

Gast #2136349
Lesenswert?

Hallo,

ich bin gerade dabei für meine HP eine Statistik zu schreiben.
Gespeichert werden soll (vorerst): Browser, Betriebssystem, Auflösung

Das Problem dabei ist, wie ich die Tabelle(n) für die Daten erstellen 
soll.
Die Daten werden Tageweise gespeichert und derzeit jeweils nur Ziffern 
hochgezählt.
Bsp:
Spalten | Daten
Tag     | 7.4.2011
Firefox | 1476
Opera   | 563
Windows | 5321
Linux   | 1234
...

Das ganze ist aber ziemlich unflexibel, z.B. wenn man einen Browser 
hinzufügen möchte. Allerdings lässt sich das leicht hochzählen:
UPDATE tabelle SET $browser = $browser+1;

Eine andere Möglichkeit wäre jeweils zum Tag alle Angaben zu speichern.
Bsp:
Spalten        | Daten
Tag            | 7.4.2011
Browser        | Firefox:1476; Opera: 563; ...
Betriebssystem | Windows: 5321; Linux: 1234; ...
Das erhöht aber die Menge an gespeicherten Daten ziemlich, da ja täglich 
alle besuchten Browser, Betriebssysteme, usw. gespeichert werden müssen. 
Außerdem müsste ich bei jedem Besucher alle Daten des Tages abfragen, 
zerlegen, den betreffenden Wert erhöhen, wieder zusammenbauen und 
aktualisieren.

An jeweils extra Tabellen dachte ich auch schon, finde ich aber zu groß.

Was wäre die beste Lösung, oder gibt es noch etwas sinnvolleres?
Gast #2136382
Lesenswert?

Ich weiß noch nicht wie lange.
Es werden ja nicht nur 3 Spalten pro Tabelle benötigt, sondern wären 
dann auch gleich mal 20 oder mehr.
Siehe z.B: http://de.wikipedia.org/wiki/Liste_von_Webbrowsern
Firefox, Opera, IE, Chrome, Konqueror, i* (Apple), Safari,... Bisher nur 
ganz grob und schon 7 Spalten für Betriebssysteme wirds nicht besser.

Das Problem mit extra Tabellen auch, wenn ich die Statistik vielleicht 
mal erweitern will.
Gast #2136448
Lesenswert?

MyISAM

Bisher wird einfach beim ersten Besucher am Tag ein neuer Datensatz mit 
lauter 0 angelegt, also das hochzählen ist kein Problem.

Ich versteh das mit den 3 jetzt nicht ganz.

Tag  | Browser | Zähler
7.4. | Firefox | 142

Aber wie muss ich das dann für andere Browser und Tage erweitern? Tag 
und Browser gleichzeitig geht ja nicht, oder denk ich da gerade falsch?
Gast #2136591
Lesenswert?

Troll schrieb:
> MyISAM

Also MySQL?

Troll schrieb:
> Aber wie muss ich das dann für andere Browser und Tage erweitern? Tag
> und Browser gleichzeitig geht ja nicht, oder denk ich da gerade falsch?

Scheinbar, warum sollte Tag und Browser nicht gleichzeitig gehen?

Tag  | Browser | Zähler
-----------------------
7.4. | Firefox | 142
7.4. | IE8     | 123
7.4. | IE9     | 1
7.4. | OPERA   | 321
6.4. | Firefox | 5
6.4. | IE8     | 7
6.4. | IE9     | 2
6.4. | OPERA   | 4

usw.

SQL sähe etwa so aus (aus dem Kopf und ungetestet)
1
CREATE TABLE browser_stats (
2
  tag date not null,
3
  browser varchar(255) not null,
4
  counter bigint unsigned not null,
5
  PRIMARY KEY (tag, browser)
6
);
7

8
INSERT INTO browser_stats SET tag=now(),browser='Firefox',counter=1
9
  ON DUPLICATE KEY UPDATE counter=counter+1;
10

11
INSERT INTO browser_stats SET tag=now(),browser='IE8',counter=1
12
  ON DUPLICATE KEY UPDATE counter=counter+1;
13

14
INSERT INTO browser_stats SET tag=now(),browser='IE9',counter=1
15
  ON DUPLICATE KEY UPDATE counter=counter+1;
#2136681
Lesenswert?

Normalisierung!

eine Tabelle für Browser
eine für Betriebsysteme
und eine für die Zähler

CREATE TABLE browser(
  id   INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  name VARCHER  NOT NULL
);

CREATE TABLE OS(
  id   INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  name VARCHER  NOT NULL
);

CREATE TABLE stats(
  id         INTEGER  NOT NULL PRIMARY KEY AUTO_INCREMENT,
  tag        DATE     NOT NULL,
  browser_pk INTEGER  REFERENCES browser(name) NOT NULL,
  os_pk      INTEGER  REFERENCES browser(name) NOT NULL,
  counter bigint NOT NULL,
)

edit:
für mysql müssen glaub ich die Schlüsseldefinitionen umformuliert werden
#2137689
Lesenswert?

Läubi .. schrieb:
> Vlad Tepesch schrieb:
>> der titel des Threads lautet mysql
>
> Trotzdem unterstützt MySQL nur mit InoDB FKs nicht mit MyISAM als
> Speicher-Engine!

mit den verschiedenen DB-Engines da kenn ich mich nicht so gut aus.
sollte auch kein trotz sein

unabhängnig davon, werden die doch hoffentlich geparst.
Da kann man wenigstens die Datendefinition vernünftig aufschreiben und 
sei es nur wegen dem dokumentativen Charakter, oder falls man doch mal 
auf eine vernünftige DB umzieht *g* 

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren