SQL Eine knifflige Aufgabe. MySQL mit Regex?

Eagle-PsyX-

Commander
Registriert
Juni 2006
Beiträge
2.178
Hi,

ich hab mal ein Anliegen.
Und zwar möchte ich meine "Refer"-Links nach Hosts sortiert haben :D
Unten seht ihr ein Bild aus PHPMyAdmin damit ihr die Struktur erkennt.

Also ich hätte gerne ein Ergebnisse wie:
Code:
refer_host  |  refer_host_count
----------------------------------------
eaglepsyx.dyndns.org | 42
www.computerbase.de | 2
www.online-arts.de | 3
In refer_host_count sollten alle "refer_count"s des jeweiligen Hosts zusammengezählt werden.
Ist das eigentlich mit reinem MySQL Möglich? :D Viel Spaß beim Rätseln!

Ergänzung:
Mir ist klar, dass ich das mit PHP sammeln und sortieren kann. Aber meine Frage ist ob sowas mit reinem MySQL realisierbar wäre.
 

Anhänge

  • Refer.png
    Refer.png
    24,8 KB · Aufrufe: 224
Zuletzt bearbeitet:
Hast du mal GROUP BY REGEX(deinregex) probiert?

Wenn, müsste es so funktionieren ...
 
Sorry, krieg das nicht hin. Meine Ansätze scheitern Gnadenlos, deswegen schreibe ich lieber nur den regulären Ausdruck:
Code:
@^(?:http://)@

Ergänzung:
Ah, irgendwie ist das Mist. Ich muss ja alle 'gleiche' Hosts sortieren, aber erstmal 'separieren' aber nur wie?
 
Zuletzt bearbeitet:
Warum erstellst du nicht 2 Tabellen, eine in der du nur die reine Domains zählst, und die andere, die wie deine aktuelle Tabelle ausschaut.


Mit einer Regexp die Datenbank durchsuchen halte ich für einen Schuss ins Bein.
 
Werde wohl weder noch tun, sondern mit PHP einfach als Array (mysql_fetch_assoc) speichern, Array durchgehen (foreach) und sortiert ausgeben. Da endet wohl das Reich von MySQL.

Muss nur noch überlegen wie ich sie gruppieren soll.
 
Tschuldigung, hatte was überlesen...
 
Zuletzt bearbeitet:
Danke!
Scheint zu klappen, muss noch ein bisschen überarbeitet werden (der Feinschliff ;)) aber das ist kein Problem.
Code:
SELECT
  refer_time,
  refer_url,
 SUM(refer_count) AS refer_count
FROM
  `oa_refer`
GROUP BY 
  SUBSTRING_INDEX(refer_url, '/', 3)
ORDER BY
  `refer_count` DESC
 
Zuletzt bearbeitet:
Ich habs mir gerade nochmal angeguckt.

Bei deiner letzten Lösung hast du das Problem, dass du falsche Ergebnisse bekommst, wenn "http://" nicht davor steht. Dann wird nä(h)mlich nicht nur der Hostname ausgewertet, sondern auch der erste Teil des Restes.

Mein Vorschlag:
Code:
SELECT
  SUBSTRING_INDEX(TRIM(LEADING 'http://' FROM refer_url), '/', 1) AS refer_host,
 SUM(refer_count) AS refer_count
FROM
  referrer
GROUP BY 
  refer_host
ORDER BY
  refer_count DESC
Damit extrahierst du den Hostnamen aus der URL.
 
Oh Danke!
Das war wohl dann der Feinschilff.

Kann mir jemand einen Link zur Übersicht aller MySQL-Funktionen schicken?
Also Funktionen wie SUM(), SUBSTRING_INDEX(), TRIM(), LEADING(), ADD().

Ich finde die MySQL Dokumentation im Vergleich zu der von PHP absolut unter aller Sau :D Die Erklärung sind extrem minimal und die Beispiele dürftig.

Ergänzung:
Seh ich das richtig, dass zuerst das "http://" vom URL geschnitten wird und anschließend wird der Teil zurückgegeben bis zum ersten "/"?
 
Zuletzt bearbeitet:
Also die MySQL-Doku ist deutsch, eigentlich recht übersichtlich und für jeden Funktion gibt es ein Beispiel: String-Funktionen
 
Ich weiß dass sie Deutsch, Englisch und paar Sprachen mehr hat.

Und exakt! Schau dir mal die Übersicht der String Funktionen an und danach die hier String-Funktionen (PHP). Ich hoffe dir fällt was auf. Mehr Details, mehr Infos, allgemein Übersicht. Kommentare zur jeder Funktion, eigene Seite für jede Funktion.
In der MySQL Doku wird alles zusammengeschmißen...

P.S.: Habe von beiden Dokumentationen eine CHM-Datei, weil des öfteren auch Offline arbeite.
 
Aber die Hilfen sind wie Äpfel und Birnen und sowas miteinander zu vergleichen über 2 Script Sprachen hinweg... ist "relativ" Dumm sry.

Ich kann ja auch nicht C++ Dokumentation mit der von Java gleichsetzten...

Das einige Dinge immer gleich bzw Identisch sind... kommt vor da man sich meist an schon vorhandenen Dingen bedient.
 
Es geht hier nicht um die Skript-Sprachen, sondern um deren Dokumentation. Und übersichtliche, ordentliche Systeme kann man überall schaffen, das ist nicht dumm.

Und da kann mehr sehr wohl viel mehr Übersicht einbauen! Viele Seiten wie http://www.selfphp.de/ (auch wenn sie fast kopiert wirken) führen sogar übersichtlichere Dokumentationen als MySQL.
Schon allein bei den String-Funktionen.
Was spricht bitteschön dagegen alle Stringfunktionen aufzuzählen und nebendran in einen kurzen Satz zusammenfassen was die Funktion bewirkt? Schwer? NEIN!
Vergleich hin oder her. Es ist eine Qual die lange Liste nach eine Funktion zu suchen die man noch nicht kennt! Oder man die Auswirkung kennt aber den Funktionsnamen vergessen hat.
 
Zuletzt bearbeitet:
Ich finde die MySQL-Doku (zumindest die im CHM-Format) sehr gut gelungen. Hängt vielleicht auch mit den CHM-eigenen Möglichkeiten der Volltextsuche zusammen. Ohne diese Doku hätte ich wahrscheinlich schon des öfteren mal bei einem Problem das Handtuch geworfen.
 
Ja die CHM-Datei ist wirklich eine Bereicherung im Vergleich zur online Doku. Ich ziehe sie auch vor. Vorallem weil die Suche hier auch angenehmer ist. Nichts destotrotz könnte sie besser sein ;-)
 
Zurück
Oben