tanja: 2 Suchen in einer Anfrage (1 optional)

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

  1. 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

    --
    -------------------
    Computer programming is tremendous fun. Like music, it is a skill that derives from an unknown blend of innate talent and constant practice. Like drawing, it can be shaped to a variety of ends: commercial, artistic, and pure entertainment. Programmers have a well-deserved reputation for working long hours but are rarely credited with being driven by creative fevers. Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination, but because their imagination reveals worlds that others cannot see. -- Larry OBrien and Bruce Eckel in Thinking in C#