mysql - Ermitteln wie oft ein Wort im selben Feld vorkommt

tombe

Erfahrenes Mitglied
Hallo Forum,

bin schon den ganzen Morgen am suchen aber ich hab bisher nichts gefunden was mir weiterhilft.

Ich habe in meiner Tabelle unter anderem ein Textfeld (VarChar 50) und in diesem Feld müßte ich nun ermitteln wie oft ein bestimmter Suchbegriff darin vorkommt.

Beispiel der Satz oben (auch wenn er länger als 50 Zeichen ist).
Wenn ich ihn nach dem Begriff "FELD" durchsuche müßte ich als Ergebnis meiner Abfrage 2 bekommen.

Gibt es hier irgend eine SQL-Funktion mit der ich das direkt in der Abfrage rausbekomme?
So nach dem Motto:

PHP:
SELECT ANZAHL('suchbegriff', feldname) AS treffer FROM TABELLE WHERE feldname LIKE '%abc%'

Hoffe das ihr versteh was ich meine und mir da helfen könnt.

Gruß Thomas
 
Hi Thomas,

eine vordefinierte Funktion dafür ist mir nicht bekannt, aber das müsstest Du eigentlich berechen können, indem Du per REPLACE alle Vorkommen des Suchwortes entfernst, die Länge des resultierenden Strings von der Länge des ursprünglichen Strings abziehst und das durch die Länge des Suchwortes teilst.

LG
 
Cool, damit kann man arbeiten!! Man muss halt nur die richtigen Leute fragen.und schon kommt man weiter.

Vielen Dank das hat geholfen.

Gruß Thomas
 
Hi,


So funktioniert das Prinzip. Nett, dass Du noch eine konkrete Lösung präsentieren wolltest. :)
Deine Abfrage hat noch einen Fehler. Du hast vergessen, durch die Länge des Suchbegriffes zu teilen. So gibt die Abfrage ja nur die Länge des Feldes zurück, wenn man alle Treffer entfernt. Und man sollte hier CHAR_LENGTH verwenden, statt LENGTH, wir brauchen ja die Anzahl Zeichen, nicht die Anzahl Bytes.

SQL:
SELECT 
   (CHAR_LENGTH(Spalte) - CHAR_LENGTH(REPLACE(Spalte,'Wort','') DIV CHAR_LENGTH('Wort')) 
      as Treffer
   FROM tabelle

Außerdem noch ein Hinweis: Dieses Verfahren beachtet keine Wortgrenzen, sondern zählt alle Vorkommen, die auf
SQL:
Spalte LIKE '%Wort%'
matchen.

LG
 
Deine Abfrage hat noch einen Fehler. Du hast vergessen, durch die Länge des Suchbegriffes zu teilen. So gibt die Abfrage ja nur die Länge des Feldes zurück, wenn man alle Treffer entfernt.
Im konkreten Fall (Beispiel im verlinkten Blogeintrag) ist das egal, da die Länge des Suchgegriffes 1 ist. Das wird dort auch extra erwähnt.

Und man sollte hier CHAR_LENGTH verwenden, statt LENGTH, wir brauchen ja die Anzahl Zeichen, nicht die Anzahl Bytes.
So lange man konsistent das eine oder das andere benutzt, sollte das Ergebnis dasselbe sein. Es sei denn man treibt irgendwelche Spielchen mit speziellen Unicodesequenzen. Mit CHAR_LENGTH ist man da aber auf der sicheren Seite.

Grüße, Matthias
 
Zurück