Gewichtete Bedingungen in der WHERE-Klausel einer SQL-Anweisung

8

Ich möchte nach Datensätzen suchen, bei denen ein bestimmtes Feld entweder mit einer Zeichenfolge beginnt (sagen wir "ar") oder dass das Feld CONTAIN die Zeichenfolge "ar" enthält.

Ich betrachte jedoch die beiden Bedingungen als unterschiedlich, da ich die Anzahl der zurückgegebenen Ergebnisse auf 10 beschränke und die STARTS WITH-Bedingung stärker als die CONTAINS-Bedingung gewichten soll.

Beispiel:

%Vor%

Der Haken ist, dass, wenn es Namen gibt, die mit "ar" beginnen, sie bevorzugt werden sollten. Die einzige Möglichkeit, einen Namen zurückzubekommen, der nur "ar" enthält, ist, wenn weniger als 10 Namen mit "ar"

beginnen

Wie kann ich das mit einer MySQL-Datenbank machen?

    
Stephen Stchur 17.02.2011, 23:47
quelle

5 Antworten

10

Sie müssen sie in zwei Teilen auswählen und den Ergebnissen ein Präferenz-Tag hinzufügen. 10 von jedem Segment, dann füge sie zusammen und nimm die besten 10 wieder. Wenn Segment 1 8 Einträge erzeugt, dann wird Segment 2 von UNION ALL die verbleibenden 2

produzieren %Vor%     
RichardTheKiwi 18.02.2011, 00:06
quelle
4

Weisen Sie den Ergebnissen einen Codewert zu und sortieren Sie sie nach dem Codewert:

%Vor%

Bearbeiten:

Siehe Richard aka cyberkiwis Antwort für eine effizientere Lösung, wenn es potenziell viele Übereinstimmungen gibt.

    
mellamokb 17.02.2011 23:51
quelle
0

Versuchen Sie es (keine MySQL-Instanz zum Testen verfügbar):

%Vor%

Es gibt wahrscheinlich bessere Möglichkeiten, das zu tun, aber das kam mir sofort in den Sinn.

    
Derek Prior 17.02.2011 23:52
quelle
0

Meine Lösung ist:

%Vor%

Das instr () sucht nach dem ersten Vorkommen des fraglichen Musters. AR% wird vor xxAR kommen.

Dies verhindert:

  1. Sollte nur einmal eine Tabellensuche durchführen. Unions und abgeleitete Tabellen tun 3. Die ersten zwei in den Spalten, um die Muster herauszufiltern, und dann die dritte in der Teilmenge, um zu finden, wo sie gleich sind - da die Vereinigung die Duplikate herausfiltert.

  2. Gibt basierend auf der Position des Musters eine echte Sortierung an. Wx & gt; xW & gt; xxW & gt; usw. ...

petemill66 18.02.2011 20:19
quelle
0
%Vor%

Sollen Aufträge mit der Binärzahl "Wahr / Falsch" für "Gleich" und "Bei Index" ausgeführt werden, sollte dies vom Index

profitieren     
exussum 14.12.2015 21:44
quelle

Tags und Links