DannyLupo: Jeweilige Anzahl String-Treffer in MySQL-Spalte

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.

  1. 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

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. 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|1

      Wow! Entweder Dein MySQL spricht einen ganz neuartigen Dialekt, es ist kaputt oder Du hast uns entscheidende Teile Deiner Abfrage unterschlagen ...

      MfG,
      EKKi

      1. 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

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Ich habe bereits diverse String-Funktionen durchwühlt.
          Jemand anderes eine Idee?

          1. 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

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
          2. 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

  2. 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

    --
    "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."