Michael: MySQL: Gemeinsame Basis von Strings ermitteln

Ich habe eine Tabelle, die u.a. ein Feld mit Einträgen in der Art von

Schnittblumen gebunden rot
Schnittblumen gebunden blau
Schnittblumen gebunden gelb

hat.

Jetzt möchte ich, die Basis oder den "kleinsten gemeinsamen Nenner"
ermitteln, also in dem Fall oben eben "Schnittblumen gebunden".

Lässt sich das mit einem SQL-Query bewerkstelligen?

  1. Hi Michael,

    Jetzt möchte ich, die Basis oder den "kleinsten gemeinsamen Nenner"
    ermitteln, also in dem Fall oben eben "Schnittblumen gebunden".

    Lässt sich das mit einem SQL-Query bewerkstelligen?

    AFAIK nicht. Du könntest jedes Wort in eine eigene Spalte schreiben, dann sollte es irgendwie gehen.

    Viele Grüße aus Freiburg,
    Marian

  2. Hallo

    Schnittblumen gebunden rot
    Schnittblumen gebunden blau
    Schnittblumen gebunden gelb

    Jetzt möchte ich, die Basis oder den "kleinsten gemeinsamen Nenner"
    ermitteln, also in dem Fall oben eben "Schnittblumen gebunden".

    Wenn du _vorher_ weißt, wonach du suchst, kannst du mit Platzhaltern arbeiten ... WHERE bla LIKE 'Schnittblumen gebunden%'. Wenn es dann aber richtig[tm] sein soll, solltest du für jede der hier zusammen abgespeicherten drei Eigenschaften eine eigene Spalte in der Tabelle erzeugen. Das nennt man atomisieren (in etwa: Das Zerlegen der Informationen in ihre _einzelnen_ Eigenschaften).

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    Veranstaltungsdatenbank Vdb 0.1
    1. Wenn du _vorher_ weißt, wonach du suchst, kannst du mit Platzhaltern arbeiten ... WHERE bla LIKE 'Schnittblumen gebunden%'.

      Leider nein - ich kann es anhand einer anderen Spalte nur soweit eingrenzen, dass eben immer passende Paare sind, also

      Schnittblumen gebunden rot
      Schnittblumen gebunden blau
      Schnittblumen gebunden gelb

      oder

      Kaktus mit Blüten in Topf
      Kaktus mit Blüten ohne Topf

      Etwas gemischtes wie

      Schnittblumen gebunden blau
      Schnittblumen gebunden gelb
      Kaktus mit Blüten in Topf

      kommt nicht vor, aber ich kann eben leider nicht vorhersagen was es ist.

      Ich seh schon, ich komm um eine PHP Lösung, die sich Buchstabe für Buchstabe in den Strings vorarbeitet und vergleicht, nicht rum. :(

      1. Hallo Michael,

        Etwas gemischtes wie

        Schnittblumen gebunden blau
        Schnittblumen gebunden gelb
        Kaktus mit Blüten in Topf

        kommt nicht vor, aber ich kann eben leider nicht vorhersagen was es ist.

        Hmm, Du könntest in etwa wie folgt vorgehen:

        Ermittle das Minimum der Zeichenkettenlängen
        Solange die Länge größer ist als 0 und es mehr als einen Datensatz gibt
          Wähle SUBSTR(Zeichenkette,1, Länge) GROUP BY SUBSTR(String, 1, Länge)
          Verringere die Länge um 1
        Ende Solange
        Daraus solltest Du die maximalen gemeinsamen erste Zeichenkette ermitteln können.

        Anmerkung: Bei wenigen Datensätzen und langen Zeichenketten ist diese Art der Ermittlung sehr teuer und wenig ratsam. Eine Ermittlung in der API ist dann
        wohl ressourcenschonender.

        Grundsätzlich wäre es besser, die beiden Informationen getrennt zu speichern:

        Basisbezeichnungen
          Erweiterungen

        Freundliche Grüße

        Vinzenz

  3. yo,

    Jetzt möchte ich, die Basis oder den "kleinsten gemeinsamen Nenner"
    ermitteln, also in dem Fall oben eben "Schnittblumen gebunden".

    wenn du weißt, wieviele wörter maximal in der spalte vorkommen können, dann könnte ich versuchen daraus eine abfrage zu zaubern (ohne gewähr). ansonsten bräuchste man so etwas wie eine schleife, keine ahnung ob mysql das kann. dann sollte es auch ganz allgemein gehen. wichtig ist mysql ab 4.1

    Ilja