Andreas-Lindig: unvorhersehbare UND-Verknüpfung zwischen verschiedenen Spalten

Beitrag lesen

Hallo Forum,

Ich überarbeite gerade meine Forums-Suche und stoße da auf folgendes Problem: ganz zu Anfang soll es ein einfaches Eingabefeld geben in das man ein oder mehrere Wörter eingeben kann. Ich will nun die Option anbieten, daß _alle_ Wörter im Beitrag vorkommen sollen. Da dieser erste Suchschritt aber so einfach und global wie möglich sein soll, können die sowohl alle zusammen z.B. im Inhalt oder im Namen vorkommen, als auch verteilt, z.B. Wort1 im  Namen, Wort2 und Wort3 im Inhalt. Es sollen aber immer _alle_ in einem Posting vorkommen, da ich eine echte ODER-Suche ziemlich Banane finde. Eine Suche soll schließlich eingrenzen und nicht möglichst viele Treffer raushauen. Wenn der Patient unbedingt ODER suchen will, kann er auch zwei Suchvorgänge nacheinander starten.

So: nun ist die Frage, wie packe ich das in eine Abfrage. Es kommen also vom Formular zum Beispiel drei Suchwörter an. Sie wurden schon getrennt und und in ein Array gepackt. Und nun?

gegeben seien 3 Suchwörter: [1], [2], [3] und gesucht werden soll in drei Tabellenspalten: Name, Thema, Inhalt.

|  Szene1   | Szene2 | Szene3 | Szene4 | Szene5 |
---------------------------------------------------------
Name:   | [1][2][3] | [1][2] | [1][3] | [2][3] |  [1]   |

Thema:  |           | [3]    | [2]    | [1]    |  [2]   |

Inhalt: |           |        |        |        |  [3]   |
---------------------------------------------------------
Anzahl  |    3x     |  3*2x  |  3*2x  |  3*2x  | 3*2*1x |

Also:

in Szene1 kommenen alle drei Suchwörter im Namen vor. Sie könnten genauso zusammen im Thema oder im Inhalt vokommen - 3 Möglilchkeiten.

in Szene2 kommen im Namen zwei Suchwörter vor, das dritte im Thema. Die zwei Wörter aus Name könnten genauso in allen drei Rubriken auftauchen und das jeweils letzte Wort in einer der anderen beiden Rubriken - 3*2 Möglichkeiten

in Szene3 kommen zwei andere Suchwörter zusammen vor und das dritte woanders...

so kann man die Tabelle weiterlesen. Ich komme auf 27 Möglichkeiten, die ich ja alle in der SQL-Abfrage unterbringen müßte. Bei 4 Suchwörtern wären es schon 81 Möglichkeiten.

Also zum Beispiel:

SELECT * from tabelle
WHERE
(
      Name = [1]
      AND
      Name = [2]
      AND
      Name = [3]
)
OR
(
      Name = [1]
      AND
      Name = [2]
      AND
      Thema= [3]
)
OR...

Das kommt mir etwas umständlich vor. Ich habe schon an match() über drei Spalten gedacht, aber da wird ja nur mit einer ODER-Verbindung gesucht, es müssen also nicht alle Wörter vokommen.

Gruß, Andreas