2 Suchen in einer Anfrage (1 optional)
tanja
- datenbank
0 Rouven
hi,
hab
select ... as relevanz
where
(
match(volltextfeld)against(optionaler_feldinhalt1 or...or...)
>>?gesuchter operator?<<
match(volltextfeld)against("pflichtinhalt1 AND pflichtinhalt2 ...")
)
order by relevanz desc
nun würde ich gerne, die treffer, bei denen alle pflichtinhalte enthalten sind und gleichzeitig auch der ein oder andere optionale inhalt im volltextfeld enthalten ist, als erstes angezeigt bekommen.
ist vom optionalen nichts enhalten, dann kommen die treffer eben erst später; jedoch sollen sie schon mit-gelistet werden.
wie muss ich hierfür den query anpassen?
setze ich als operator AND, so muss sowohl mindestens 1 optionaler und jeder pflichinhalt enthalten sein.
setze ich als operator OR, so muss entweder mindestens 1 optionaler (und keines der pflichtinhalte!) oder jeder pflichinhalt (und kein optionaler) enthalten sein.
folglich sind beide ungeeignet, auch wenn AND noch besser ist als OR...
wie kann ich das problem geschickt lösen?
danke,
gruß, tanja
Hi,
hmh, vielleicht hat jemand einen besseren Vorschlag, aber ich würde genau das machen was du im Titel beschrieben hast: Zwei Abfragen in einer.
Teil 1: Alle Treffer, die sowohl Pflichtinhalte als auch Optionale Inhalte haben (AND):
SELECT ..., 2 AS relevanz ...
UNION
Teil 2: Alle Treffer, die nur Pflichtinhalte haben aber keine optionalen Inhalte (explizit mit einbeziehen, sonst gibts doppelte Datensätze, die aber selbst ein DISTINCT auf Grund der relevanz-Spalte nicht findet):
SELECT ..., 1 AS relevanz ...
Teil 3: Sortierung in erster Linie nach der virtuellen Relevanzspalte
ORDER BY relevanz, ...
MfG
Rouven