Jeweilige Anzahl String-Treffer in MySQL-Spalte
DannyLupo
- datenbank
Hi!
Ich brauche eine MySQL-Abfrage, die mir nicht nur ausgibt, wie in wie vielen Zellen einer bestimmten Spalte ein String vorkommt, sondern wie noch wie oft dieses auch ausgegeben wird.
Beispiel zur Verdeutlichung:
id|string
01|xTESTxxx
02|xxTESTTESTx
03|xTESTxxx
04|xxxxx
05|TESTxTESTxTEST
Folgender Befehl:
SELECT count(*) FROM tabelle WHERE textfeld LIKE %TEST%;
Gibt mir Folgendes aus:
01|1
02|1
03|1
04|0
05|1
Ich möchte aber den Befehl, der mir nicht nur die Info String-Ja/Nein, sondern die Anzahl ausgibt, mit der der String in der Zelle vorkommt.
Also:
01|1
02|2
03|1
04|0
05|3
Weiß jemand Rat?
Vielen Dank im Voraus,
Euer Danny.
Mahlzeit DannyLupo,
SELECT count(*) FROM tabelle WHERE textfeld LIKE %TEST%;
Gibt mir Folgendes aus:01|1
02|1
03|1
04|0
05|1
Wow! Entweder Dein MySQL spricht einen ganz neuartigen Dialekt, es ist kaputt oder Du hast uns entscheidende Teile Deiner Abfrage unterschlagen ...
MfG,
EKKi
Falls der syntaktisch nicht korrekt hingeschriebene 1. Befehl stört, hier dann halt ein anderer:
SELECT id, 1 FROM tabelle WHERE textfeld LIKE '%TEST%';
und wir bekommen:
01|1
02|1
03|1
05|1
Die Frage bleibt aber:
Wie komme ich auf folgendes Ergebnis:
01|1
02|2
03|1
05|3
, das mir die Anzahl eines Strings in einer bestimmten Zelle ausgibt.
Z.B. den String TEST in der Tabelle:
id|string
01|xTESTxxx
02|xxTESTTESTx
03|xTESTxxx
05|TESTxTESTxTEST
Mahlzeit DannyLupo,
SELECT count(*) FROM tabelle WHERE textfeld LIKE %TEST%;
Gibt mir Folgendes aus:01|1
02|1
03|1
04|0
05|1Wow! Entweder Dein MySQL spricht einen ganz neuartigen Dialekt, es ist kaputt oder Du hast uns entscheidende Teile Deiner Abfrage unterschlagen ...
MfG,
EKKi
Mahlzeit DannyLupo,
Falls der syntaktisch nicht korrekt hingeschriebene 1. Befehl stört, hier dann halt ein anderer:
Es geht nicht darum, dass ein syntaktisch nicht korrekter Befehl "stört", sondern um folgendes: wenn Du Hilfe brauchst und ein Problem beschreibst, dann sollten die Angaben, die Du dabei machst, auch korrekt sein - ansonsten ist es für Deine Leser u.U. schwer, das Problem nachzuvollziehen. Und in diesem Fall konnte der von Dir genannte SQL-Befehl nie im Leben die von Dir genannte Ergebnismenge liefern ... was also sollen Deine Leser dann davon halten?
Wie komme ich auf folgendes Ergebnis:
01|1
02|2
03|1
05|3, das mir die Anzahl eines Strings in einer bestimmten Zelle ausgibt.
Es geht also um MySQL und ein Feld mit einem String-Datentyp, normalerweise würde ich da auf das entsprechende Kapitel im Handbuch verweisen ... ich habe es allerdings auch gerade überflogen und mir ist auf den ersten Blick keine Funktion aufgefallen, die Dir direkt die gewünschten Werte liefert. Vielleicht schaust Du selbst auch mal - u.U. fällt Dir mit den vorhandenen Funktionen eine alternative Lösung ein.
Achja: und TOFU ist unschön und wird nicht gern gesehen.
MfG,
EKKi
Ich habe bereits diverse String-Funktionen durchwühlt.
Jemand anderes eine Idee?
Hello,
Ich habe bereits diverse String-Funktionen durchwühlt.
Jemand anderes eine Idee?
Eine benutzerdefinierte Funktion bzw. eine stored Procedure dafür schreiben.
Welche MySQL-Version ist es denn?
Dass die Funktion teuer wird, ist sowieso klar.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Moinmoin.
Womöglich soll Deine gewünschte "Trefferzahl" für eine Sortierung dienen und Du willst die Treffer letztlich nach "Relevanz" ausgeben?
Dann schaust mal hier:
http://dev.mysql.com/doc/refman/5.1/de/fulltext-search.html
Grüße
Hi,
Ich möchte aber den Befehl, der mir nicht nur die Info String-Ja/Nein, sondern die Anzahl ausgibt, mit der der String in der Zelle vorkommt.
Was vorgefertigtes scheint's da nicht zu geben - also muesste man wohl selber was basteln.
Z.B. koennte man den Suchbegriff mittels REPLACE() durch einen Leerstring ersetzen, also "rausloeschen".
Dann bildet man die Differenz aus Stringlaenge_vorher minus Stringlaenge_nachher, und teilt die noch durch Laenge_Suchbegriff ...
Laenge des Suchbegriffes TEST: 4
02|xxTESTTESTx
Laenge: 11
TEST durch "" ersetzt:
xxx
Laenge: 3
(11-3)/4 = 2
05|TESTxTESTxTEST
Laenge: 14
TEST durch "" ersetzt:
xx
Laenge: 2
(14-2)/4 = 3
MfG ChrisB