Heim >Datenbank >MySQL-Tutorial >Wie kann ich MySQL-Suchergebnisse nach „Best Match' basierend auf der Position des Suchbegriffs sortieren?

Wie kann ich MySQL-Suchergebnisse nach „Best Match' basierend auf der Position des Suchbegriffs sortieren?

DDD
DDDOriginal
2024-12-30 00:37:20961Durchsuche

How Can I Order MySQL Search Results by

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 Mit einem relevanten Feld (z. B. Worthäufigkeit) können wir Verknüpfungen auflösen und die Ergebnisse weiter sortieren.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn