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"
beginnenWie kann ich das mit einer MySQL-Datenbank machen?
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%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.
Meine Lösung ist:
%Vor%Das instr () sucht nach dem ersten Vorkommen des fraglichen Musters. AR% wird vor xxAR kommen.
Dies verhindert:
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.
Gibt basierend auf der Position des Musters eine echte Sortierung an. Wx & gt; xW & gt; xxW & gt; usw. ...