[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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.