Aggregat wie GROUP BY mit nicht exakten Treffern?!

Hi zusammen,

hoffe hier kann mir jemand helfen. Aus der MySQL Referenz bin ich
nicht schlau geworden. Folgendes:

Ich habe eine Tabellenspalte spalte1 mit folgenden 3 Eintraegen:

blume keywort1 haus
tee keywort2 pool auto
keywort1 nikolaus weihnachten

Jetzt moechte ich diese Spalte groupen und zwar so, dass dieses
Ergebnis rauskommt
keywort1 2 Mal
keywort2 1 Mal

Woebei ich die Keywords nicht kenne! Also, Mysql solle die Spalten
miteinander vergleichen und teilweise uebereinstimmende Eintraege
gegroupt werden.

Index anlegen und mit match hab ich mir ueberlegt, aber das Problem
ist dabei, dass ich das Keyword nicht kenne.

Habt ihr vielleicht eine Loesungsmoeglichkeit? Vielen Dank im Voraus!

Gruss,
David

Hi!

Du willst nach etwas suchen (bzw. gruppieren), von dem Du nichts weißt?

blume keywort1 haus
tee keywort2 pool auto
keywort1 nikolaus weihnachten

Jetzt moechte ich diese Spalte groupen und zwar so, dass
dieses
Ergebnis rauskommt
keywort1 2 Mal
keywort2 1 Mal

aber auch folgendes Ergebnis wäre richtig: (oder?)
aus 2 Mal
au 3 Mal

Kurz und gut: Es kann/soll nach allem und gar nichts gruppiert werden.

Also, Mysql solle die Spalten
miteinander vergleichen und teilweise uebereinstimmende
Eintraege gegroupt werden.

Viel Spaß beim Entwickeln eines dementsprechenden Algorithmuses.

Index anlegen und mit match hab ich mir ueberlegt, aber das
Problem ist dabei, dass ich das Keyword nicht kenne.

Was hat ein Index (Beschleunigung des Zugriffes) mit diesem Problem zu tun?

Habt ihr vielleicht eine Loesungsmoeglichkeit?

Nein.

Grüße,
Tomh

aber auch folgendes Ergebnis wäre richtig: (oder?)
aus 2 Mal
au 3 Mal

Kurz und gut: Es kann/soll nach allem und gar nichts gruppiert
werden.

Hi, vielen Dank, hast natuerlich recht. Wird so wahrscheinlich nicht
gehen. Dann muss ich es wohl so loesen, dass ich die keywords vorher
abspeicher. Setzen wir voraus keyword1 und keyword2 sind bekannt.
-> Wie entwickel ich dementsprechend eine moeglichst performante
Abfrage, mit Bedacht, dass viele Eintraege in der Datenbank sind und
es viele keywords gibt. Kann ich umgehen, dass ich fuer jedes keyword
eine Abfrage machen muss. Ergebnis soll immer noch so Aussehen:

keyword1 -> 2 Mal
keyword2 -> 1 Mal

Volltextsuche mit Match? Irgendwie fehlt mir hier noch der richtige
Ansatz. Mein Loesungsansatz, gibt sicher einen effektiveren:

Select count(*) as summe FROM keywords WHERE spalte1 LIKE ‚keyword1‘
und das fuer alle keywords…

Vielen Dank, hat mir echt weitergeholfen. Wenn man alleine vor so
einem Problem sitzt verbohrt man sich manchmal in eine Idee…

Ueber weitere Ratschlaege were ich dankbar!

Gruss und ein schoenes Wochenende!

Hallo David,

wenn Du die 1. Normalform beachtest - Daten müssen atomar vorliegen - dann gehen auch deine Abfragen ganz einfach.

Tu also immer nur einen Wert/Wort in jede Zeile und schon klappts.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Der schon gepostete Ansatz, deine Daten weiter zu normalisieren, d.h. für jedes Wort einen Datensatz zu erzeugen (gegebenenfalls in einer zusätzlichen Tabelle) klingt vielversprechend.

Eventuell macht es aber auch Sinn sich mit Suchmaschinenen und davon verwendeten Indizes anzuschauen. Im Opensource Umfeld fällt mir da Lucene ein.

Mit freundlichem Gruß
Jens Schauder