Sortieren von MySQL-Ergebnissen basierend auf „Best Match“
In diesem Szenario besteht das Ziel darin, eine MySQL-Live-Suchabfrage zu verbessern, um Ergebnisse zu priorisieren wobei der Suchbegriff früher im Wort vorkommt.
Derzeit sortiert die Abfrage die Ergebnisse alphabetisch:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY word ASC
Um die gewünschte Sortierung zu erreichen, können wir eine bedingte Logik einführen, um zwischen den Positionen des Suchbegriffs in den Ergebnissen zu unterscheiden.
Sortierung nach Anfang, Mitte, Ende des Wortes
Um Ergebnisse anzuordnen, bei denen Übereinstimmungen am Wortanfang priorisiert werden, können wir Folgendes verwenden Abfrage:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY CASE WHEN word LIKE 'searchstring%' THEN 1 WHEN word LIKE '%searchstring' THEN 3 ELSE 2 END
Diese Abfrage weist jedem Ergebnis eine Gewichtung zu: 1 für perfekte Übereinstimmungen, die mit dem Suchbegriff beginnen, 3 für Übereinstimmungen irgendwo im Wort und 2 ansonsten. Diese Gewichte bestimmen die Sortierreihenfolge.
Sortierung nach Position der übereinstimmenden Zeichenfolge
Wenn wir Ergebnisse basierend auf der genauen Position der Übereinstimmung ordnen möchten, können wir die nutzen LOCATE-Funktion:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word)
Diese Abfrage berechnet die Position des Suchbegriffs innerhalb jedes Ergebnisses und sortiert entsprechend.
Umgang mit Gleichständen
In Fällen, in denen mehrere Ergebnisse die gleiche Punktzahl oder Position haben, können wir ein sekundäres Sortierkriterium einführen:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY <whatever>, word
Durch Ersetzen von
Das obige ist der detaillierte Inhalt vonWie kann ich MySQL-Suchergebnisse nach „Best Match' basierend auf der Position des Suchbegriffs sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!