3 Stimmen

Mysql nicht alphabetische Reihenfolge?

Ich habe diese Tabelle :

id | businessName|  keywords
============================
 1      Adam         FOX
 2      FOX          bla bla bla      

Der Benutzer gibt einen String ein, ich möchte diesen String in den Spalten businessName und keywords suchen. Dafür führe ich diese Abfrage aus:

SELECT * FROM `business` WHERE `businessName` LIKE '%str%' OR `keywords` LIKE '%str%'

Mein Problem:

Zuerst möchte ich die Unternehmen erhalten, deren Namen mit str übereinstimmen, und dann die Unternehmen erhalten, deren Schlüsselwörter mit str übereinstimmen.

d.h. der Benutzer gibt das Wort FOX ein, MySQL wird zwei Unternehmen zurückgeben (Adam und FOX), in diesem Fall möchte ich, dass MySQL zuerst FOX zurückgibt (weil sein Name mit dem str übereinstimmt) und dann Adam zurückgibt (weil seine Schlüsselwörter mit dem str übereinstimmen).

5voto

GolezTrol Punkte 111587

Sie können nach einem Wert bestellen, der auf der Übereinstimmung basiert:

SELECT 
  * 
FROM `business` 
WHERE 
  `businessName` LIKE '%str%' OR 
  `keywords` LIKE '%str%'
ORDER BY
  CASE WHEN `businessName` LIKE '%str%' THEN
    0
  ELSE
    1
  END

Das obige Beispiel ist ziemlich allgemein, aber das folgende sollte auch in MySQL funktionieren, einfach nach der Bedingung sortieren:

SELECT 
  * 
FROM `business` 
WHERE 
  `businessName` LIKE '%str%' OR 
  `keywords` LIKE '%str%'
ORDER BY
  `businessName` LIKE '%str%' DESC

Sie müssten DESC im Order-by hinzufügen, da eine Übereinstimmung (true) höher eingestuft wird als keine Übereinstimmung (false).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X