PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suchfunktion



inner.glow
04-05-2006, 17:00
Hallo!

Ich möchte in einem Terminkalender eine Suchfunktion einbauen. Nun habe ich folgendes Problem (vereinfacht):

Manche Veranstaltungen Gehören zu einer Veranstaltungsreihe:

Tabelle Veranstaltung
* Name (Varchar)
* Beschreibung (TEXT)
* Reihe (ID von Veranstaltungsreihe)
* ID (id)

Tabelle Veranstaltungsreihe
* Name
* Beschreibung (TEXT)
* ID (ID)

Jetzt habe ich folgendes Problem:
Wenn ich den Suchbegriff "Wort1 Wort2" eingebe, so müssen beide Worte vorkommen. Das ist auch soweirt kein Problem, da gibt es viele Möglichkeiten (LIKE "%Wort1%", MATCH ... AGAINST, etc.)

Mein Problem ist folgendes: Wenn in einer Veranstaltung A Wort1 vorkommt und in einer zugeordneten Veranstaltungsreihe Wort2, so soll Veranstaltung A gefunden Werden. Veranstalung A soll auch gefunden werden, wenn beide Worte in der dazugehörigen Veranstaltungsreihe vorkommen.

nahe liegend wäre nun, in der SQL-Abfrage die Veranstaltungs-Tabelle und die Tabelle der Veranstaltungs-Reihe über einen INNER JOIN zu verknüpfen.

Das funktioniert jedoch nicht, da dann nur Veeranstaltungen durchsucht werden, die auch einer Veranstaltungsreihe zugeordnet sind.

Überdies ist es auch nicht möglich, 2 Abfragen nacheinander zu starten (zuerst alle mit veranstaltungsreihe, dann alle ohne Veranstaltungsreihe). Eine sinnvolle Sortierung der Suchergebnisse wäre dann nicht mehr gewährleistet. Ausserdem kann in meiner Datenbank einer Veranstaltung nicht nur eine Veranstaltungsreihe zugewiesen werden... Es gibt da u.a. auch noch die Orte, die mit eingebunden werden müssen.

Gedanklich möchte ich folgendes tun:
Alle Daten, die für eine Veranstaltung vorliegen, zu einem Text zusammenfassen: Titel, Beschreibung der Veranstaltung, wenn nötig Titel und Beschreibung der Veranstaltungsreihe und wenn nötig Titel und Beschreibung des Ortes der Veranstaltung. Anschließend soll darauf für jede Veranstaltung die Volltext-Suche angewandt werden.

Ich bin bisher zu keinem Ergebnis gekommen... kann mir jemand helfen?

sg, Fabian.

Christoph
05-05-2006, 07:51
Ich denke, was Du machen willst, ist eine OUTER JOIN. Schau mal unter diesem STichwort in deinem SQL-Buch nach.

elrond
05-05-2006, 11:11
suchst du was in der richtung?

select * from veranstaltun v, veranstaltungsreihe r where v.reihe=r.id and v.beschreibung || r.beschreibung like '%Wort1%'

inner.glow
05-05-2006, 12:02
@Christoph

Du hast vollkommen Recht, vielen Dank! Noch sind mir leider Joins nicht so geläufig, dass ich selbst drauf komm' :-)

@elrond
Das wäre ja wieder ein INNER JOIN, oder? Ich benutze auch lieber die "modernere" Syntax...

Vielen Dank für die Antworten..
Für OUTER JOINS hat mir das geholfen (Falls jemand mal Hilfe braucht...)
http://www.ianywhere.com/developer/product_manuals/sqlanywhere/0901/de/html/dbugde9/00000306.htm

elrond
08-05-2006, 06:32
alte schule => alte syntax ;)

geht natürlich umzuformulieren. Meine Idee war nur die Felder in denen du suchst zu verketten, und dann mit like zu arbeiten...:cool: