Spezielle MySQL Abfrage

kirmandi

Mitglied
Hallo,

also erstmal mir ist keine aussagegräftiger Titel eingefallen :-(

so nun zu meinem Problem:
Ich habe mir ein Stats System gebastelt in dem auch die Browser, mit denne die Besucher kommen, in eine DB gespeichert werden. Dies wird mit der Versionsnummer des Browsers getan (so wie ich es vor hatte). Nun will ich aber daraus nochmal zusammenfassend ausgeben wieviele nun FireFox, Mozialla usw. insgesamt nutzen, also unabhängig der Versionsnummer.

Daher benötige ich eine MySQL Abfrage Funktion mit der ich nun aus der Spalte alle Wort/Buchstaben gleichen Daten raushole und die zugewiesenen "anzahl" Werte addiere

Ich dachte dabei dann an sowas wobei ich dann nicht weiterweiß mit der Abfrage das die Browser gleich sind..

PHP:
mysql_query("SELECT SUM(anzahl) as summe FROM counter_browser WHERE browser=wortgleich");

evlt geht es ja auch ganz anders und einfacher
wäre schön wenn mir jedoch jemand einen guten Denkanstoß (mit kleinem Beispiel) gibt :)

schonmal Danke...

*edit*
hab gerade unten bei den ähnlichen Themen gesehen, das es evtl mit like gehen könnte nur wie mache ich das !?
 
Zuletzt bearbeitet:
Es wäre zwar interessant zu wissen, wie genau du deine Infos über den Broser speicherst, aber muss halt dann auch so gehen :)

Es gibt in SQL den LIKE -Befehl

SELECT * FROM `table` WHERE `browser` LIKE 'mozilla%'

Das % bewirkt, dass der gesuchte String mit mozilla (Groß/Kleinschreibung beachten) anfangen muss, alles was danach dann kommt, wird nicht beachtet.

Deinen Count kannst du ja dann selber drauf los lassen ;-)

cu shutdown
 
also hieße das nun das ich mit der like funktion dann jeden brwoser den ich abfange so einzelnd abrufen muss ?
das wäre dann einiges ... :/


ja eintragen:
ich ermittle per useragent eben den browser mit versionsnummer, dann wird geguckt ob diese schon existiert (also browser + ver) und dann entweder die zahl dazu um 1 erhöht oder ein neuer wert angelegt und dann die zahl auf 1 gesetzt...
wie gesagt das ist ja auch so gewollt von mir!

nun möchte ich eben nur nochmal als statistik, die browser allgemein versionsunabhängig haben ...
 
PHP:
$sql = "SELECT brwsr_browser, brwsr_version, brwsr_times
FROM t3r_browser";
Diese Abfrage liefert uns alle Datensätze der Tabelle (siehe Abb. 1)
mysql_1.png

Abb. 1

Nun fügen wir alle Datensätze, die in der Spalte brwsr_browser den gleichen Wert haben zusammen und lagern die Summe der aller Werte in der brwsr_times Spalte von den Datensätzen, die gruppiert werden, in der Spalte brwsr_sum aus. Da wir die Browserversion jetzt nicht mehr brauchen lassen wir sie weg.
Das sieht dann so aus:
PHP:
$sql = "SELECT brwsr_browser, SUM(brwsr_times) AS brwsr_sum
FROM t3r_browser
GROUP BY brwsr_browser";
und liefert folgendes Ergebnis:
mysql_2.png

Abb. 2

Das Ganze kann man dann noch sortieren oder auf einzelne Browser spezifizieren, aber ich denke, wie das gemacht wird, ist bekannt.

Gruß
Marvin
 
Zuletzt bearbeitet:
also wenn ich es so mache bekomme ich immer keinen wert zurük geliefert :(
PHP:
 $sql = "SELECT SUM(anzahl) AS summe
FROM counter_browser
WHERE browser = '" . $browser . "'
GROUP BY browser";

wenn ich es dagegen so mache bekomme ich immerhin schonmal eine 1 ...

PHP:
 $sql = "SELECT SUM(anzahl) AS summe
FROM counter_browser
WHERE browser LIKE '" . $browser . "%'
GROUP BY browser";

und wenn ich es nun so mache:

PHP:
 $sql = "SELECT SUM(anzahl) AS summe
FROM counter_browser
WHERE browser LIKE '" . $browser . "%'";

dann scheint es zu klappen :)

hab die abfrage nur noch nicht ganz elegant gelöst, da ich einen array mit 5 brwosern anlege und diese dann abfrage. ok es klappt, nur will ich jetzt noch sortiert haben, dass der browser mit den meisten oben steht, egal wie die array reihenfolge ist ...

hat da jemand noch einen tipp ?
 
Zuletzt bearbeitet:
@Marvin Schmidt:
ah deine dit war nun schon was besser mit erklärung :)

wird das feld brws_sum nun noch hinten benötigt in der tabelle oder ist das dann eine eigene tabelle !?

ich habe das nur etwas anders gemacht gehabt und zwar ist der browser + version in ein feld geschrieben und das sieht dann bei mir so aus:

Code:
browser           anzahl
mozilla 5.0       10
mozilla 5.5        4
firefox 0.9.3      8
.                   .
.                   .
.                   .

da kann ich das also ohne große abänderung, der speicherung nicht nutzen :mad:
oder gibt es eine möglichkeit, dass das feld browser für diese aufgabe nur als buchstaben gesehen wird (also die zahlen ignoriert) und sie nach der aufgabe wieder zurück in text !?

schonmal danke für die hilfe, werde das dann sonst irgendwann mal so umarbeiten ... :(
 
Zuletzt bearbeitet:
PHP:
$sql = "SELECT brwsr_browser, SUM(brwsr_times) AS brwsr_sum
FROM t3r_browser
GROUP BY SUBSTRING_INDEX(brwsr_browser, ' ', 1)";

Kurze Erklärung:

SUBSTRING_INDEX(zeichenkette,begrenzer,zaehler)
Gibt die Teilzeichenfolge von Zeichenkette zeichenkette vor zaehler Vorkommen des Begrenzers begrenzer zurück. Wenn zaehler positiv ist, wird alle links vom letzten Begrenzer zurückgegeben (von links gezählt). Wenn zaehler negativ ist, wird alles rechts vom letzten Begrenzer (von rechts gezählt) zurückgegeben.

Sprich in unserem Fall wird der Browsername zurückgegeben und dann werden die Datensätze danach gruppiert.

Gruß
Marvin
 
ah das ist gut :)

jetzt nur noch meine eine frage, die du vergessen hast zu beantwrten:

wird das feld brws_sum nun noch hinten benötigt in der tabelle oder ist das dann eine eigene tabelle !?

weil das habe ich bsiher immer noch nicht ganz rausbekommen ...
 
Nein, die Spalte muss nicht in der Tabelle bestehen. brwsr_sum ist lediglich der Name, mit dem man auf die Werte von SUM(brwsr_times) zugreifen kann, nachdem die Abfrage ausgeführt wurde. => SUM(brwsr_times) AS (= als) brwsr_sum

Gruß
Marvin
 
und wie greift man dann drauf zu !?

ist das dann ein array, eine variable die nur für den einen browser existiert oder immer als abfrage der db verfügbar
 
Zurück