MySQL: Gemeinsame Basis von Strings ermitteln
Michael
- datenbank
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?
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
Hallo
Schnittblumen gebunden rot
Schnittblumen gebunden blau
Schnittblumen gebunden gelbJetzt 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
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. :(
Hallo Michael,
Etwas gemischtes wie
Schnittblumen gebunden blau
Schnittblumen gebunden gelb
Kaktus mit Blüten in Topfkommt 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
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