[MySQL] GROUP BY nach Ende eines Strings

wahnsinn

Teilzeitcholeriker
ID: 13929
L
20 April 2006
1.168
153
Hi zusammen,

ich habe in meiner Tabelle zu jedem Eintrag eine Host-Adresse in der form sub.domain.tld, wobei jeder Teil beliebig lang sein kann und sub sogar noch weiter mit Punkten unterteilt sein kann.

Ich möchte jetzt wissen, wie viele Datensätze zu jeder domain.tld existieren. GROUP BY und COUNT sind theoretisch kein Problem für mich, aber ich weiß im Moment nicht, wie ich von den Strings domain.tld herauslesen und folglich danach gruppieren kann. Gibt's da eine MySQL-Funktion, mit der ich mir alles nach dem zweit-letzten Punkt holen kann? Regulären Ausdruck könnte ich selber schreiben. Ich weiß nur nicht, welche Funktion das evtl. könnte.

Meine Alternativ-Idee wäre, beim Erstellen des Datensatzes die komplette Host-Adresse und die verkürzte extra zur Gruppierung zu speichern. Ist das evtl. sinnvoller als eine MySQL-Lösung?
 
RegExp mit MySQL
aber eine Funktion für dein "Punkt-Problem" kenne ich auch nicht.

Hast du schonmal daran gedacht deine Daten vllt weiter zu denormalisieren?
Den Domainnamen mit TLD nochmal extra zu speichern (um sich den RegExp zu sparen) wird die Performance signifikant lösen, da für RegExps keine Indexe mehr genutzt werden können.
 
Hey,
ich würde dir auch raten domain.tld weiter zu normalisieren... allerdings könntest du auch deine MySQL Abfrage komplexer gestalten. Schau mal nach LOCATE(),RIGHT(),LEFT(),LENGTH() .... das wird aber zu Komplex ;)


LG pret