Explode via SQL bzw. MySQL
Sehr selten, aber immer wieder benötigt: Ein MySQL-Befehl, welcher im Prinzip das gleiche macht wie die PHP-Funktion explode().Da ich jetzt schon zum xten Mal nach dieser Explode-Funktion für MySQL gegoogelt habe, schreibe ich dazu jetzt einfach einen Blog-Eintrag als Reminder for my self... Das spart mir das nächste mal dann die Sucharbeit...
Der Befehl lautet SUBSTRING_INDEX
Damit extrahiert man man wie bei explode() auch einen Teilstring anhand eines Trennzeichens.
Angenommen wir haben eine Tabelle persons und eine Tabelle members. In letztrer gibt es ein Feld membership welches, einen String sowie eine person_id enthält, die allerdings mit einem Semikolon getrennt sind.
Also z.B. "my_team;432". Wir wollen nun einen JOIN auf die person-Tabelle machen und dabei die ID aus dem membership-Feld benutzen und dabei diese MySQL-Explode-Funktion benutzen.
- Code: Alles auswählen
SELECT
pt.id,
pt.name
FROM
persons pt
LEFT JOIN mebers mt
ON
pt.id = SUBSTRING_INDEX(mt.membership, ';', -1)
WHERE 1
Die Verwendung ist hier relativ eindeutig und funktioniert ähnlich wie explode() in PHP. Der erste Paramenter von SUBSTRING_INDEX() ist das Feld mit den Daten. Der zweite ist das Trennzeichen. Und der dritte gibt an, ab dem wievielsten Vorkommen des Trennzeichens man den Reststring haben möchte
Wie oben zu sehen kann man hier auch negative Werte eingeben. Bei positiven Werten werden Elemente links vom Trennzeichen genommen, bei negativen Werten Elemente rechts vom Trennzeichen...
- Code: Alles auswählen
SUBSTRING_INDEX('Max;Mustermann;Teststraße 3', ';', 2)
würde also "Max;Mustermann" liefern
- Code: Alles auswählen
SUBSTRING_INDEX('Max;Mustermann;Teststraße 3', ';', -1)
liefert "Teststraße 3"
BBcode für diesen Artikel:
