Ich habe ein Webapp-Entwicklungsproblem, für das ich eine Lösung entwickelt habe, aber ich versuche, andere Ideen zu finden, die einige Leistungsprobleme umgehen können, die ich sehe.How-to: Ranking Suchergebnisse
Problemstellung:
- ein Benutzer gibt mehrere Schlüsselwörter/Token
- die Anwendung sucht nach Übereinstimmungen mit den Tokens
- für jedes Token ein Ergebnis benötigen
- dh wenn ein Eintrag hat 3 tokens, ich brauche die entry id 3 mal
- ran k die Ergebnisse
- assign X Punkte für Token Spiel
- Art der Eintrag-IDs basierend auf Punkte
- wenn Punktwerte gleich sind, verwenden Datum sortieren Ergebnisse
Was ich wollen, aber nicht herausgefunden haben, ist es, eine Abfrage zu senden, die etwas zurückgibt, das den Ergebnissen eines in() ähnlich ist, aber eine doppelte Eintrags-ID für jedes Token liefert, das für jede überprüfte Eintrags-ID übereinstimmt.
Gibt es eine bessere Möglichkeit, dies zu tun als das, was ich tue, mehrere einzelne Abfragen zu verwenden, die eine Abfrage pro Token ausführen? Wenn ja, wie lassen sich diese am einfachsten implementieren?
bearbeiten
Ich habe bereits die Einträge in Token aufgeteilt, so zum Beispiel "Spot laufen sehen" hat einen Eintrag-ID von 1, und drei Token, 'sehen', 'vor Ort', 'Ausführen', und die sind in einem separaten Token-Tabelle, mit Eintrag für sie relevanten ids so die Tabelle wie folgt aussehen könnte:
'see', 1
'spot', 1
'run', 1
'run', 2
'spot', 3
@rmbarnes - dies sein muss, wo diese UNION ops sah ich in db Grundlagen Jahren plötzlich Sinn machen; Ich gebe definitv einen Leistungslauf, um zu sehen, wie es in der Gesamtgeschwindigkeit vergleicht – warren
Denken Sie daran, UNION ALL nicht nur UNION zu verwenden, sonst denke ich nicht, dass Sie mehrere Zeilen mit der gleichen ID wie gewünscht erhalten werden. - Rambarnes 6. September 08 um 20:23 Uhr – warren