SQL-Abfrage: die Anzahl der Wörter im Text berechnen

18 Nov 2008 um 19:14 - MySQL/Datenbank

Vor kurzem hatte ich ein Problem: ich musste die Anzahl der Wörter im Text nachfoschen. Das braucht man zum Beispiel bei der Übersetzung, weil die Bezahlung nach Anzahl der Wörter erfolgt.

Man kann das mit PHP lösen, aber dann dauert es ziemlich lang. Eigentlich ist es komisch, dass SQL keine standartisierte Funktion dafür hat, deshalb muss man klügeln. Hier ist meine SQL-Abfrage:

SELECT LENGTH(TEXT1) - LENGTH(REPLACE(TEXT1," ",""))+1 FROM TABLE1

Alles ist logisch:
LENGTH(TEXT1) - gesamte Länge der Text,
REPLACE(TEXT1," ","") - ersetzt im Text Leerzeichen (" " - Abstand zwischen Wörter) durch das Zeichen "".

Es bringt fast immer das gewünschte Ergebniss, nur eine Ausnahme - wenn im Text zweimal das Leerzeichen "  " vorkommt, dann wird es als ein zusätzliches Wort mitgezählt. Sicher kann man das zusätzlich beheben:

SELECT O_NAME,
LENGTH(REPLACE(TEXT1,"  "," ")) - LENGTH(REPLACE(REPLACE(TEXT1," ","")," ",""))+1
FROM TABLE1

Es kann auch Leerzeichen " " dreimal nebeneinander vorkommen - aber ich gehe davon aus, dass der Text ganz "normal" ist ;)
Warum ist es besser diese Aufgabe mit SQL statt PHP zu lösen? Meistens muss man nicht nur ein Datensatz auslesen, sondern alle Datensätze in der Tabelle. Wenn wir das mit PHP lösen würden, dann würden wir ganze Tabelle auslesen und dann noch mit for/foreach bearbeiten... Gar nicht effizient!

Kommentare

Bisland keine Kommentare - sei der erste!


© 2008 Anton Pavlushko - Webentwicklung, Internetmarketing und Suchmaschinenoptimierung (SEO)

0.0070369243621826 sec