[MySQL] Perfekte Like Suche

jannicars

Erfahrenes Mitglied

Hallo,

mal eine kleine Beispiel Struktur:
Code:
table: users
id | name | view
1 | test  | 5
2 | test1 | 10
3 | test2 | 20
4 | test3 | 30
5 | test4 | 40

Mit dem folgenden SQL Query:
Code:
SELECT name
FROM users
WHERE LCASE(name) LIKE LCASE('test')
ORDER BY view DESC, name ASC
LIMIT 10

Bekomme ich:
Code:
test4
test3
test2
test1
test

Ist ja auch richtig, da nach view sortiert wird.
Ich möchte das ganze gerne so ausgegeben haben:
Code:
test
test4
test3
test2
test1

Zuerst test, da dies mit dem Like 100% übereinstimmt, danach alle nach view sortiert.
Wenn in dem like nix 100% übereinstimmt, dann einfach direkt nach view sortieren.

Nun meine Frage: Wie realisiere ich das am besten in einem SQL Query?
 
Zuletzt bearbeitet:
Liefert leider nicht das erhoffte Ergebnis.
Fängt schon damit an, dass ich eigentlich lieber InnoDB haben möchte.
Nächstes Problem: Case Sensitive.
Noch ein Problem hinterher: Ignoriert anscheinend Sonderzeichen, leider sind es gerade die, worauf es ankommt. Dann werde ich wohl bei LIKE bleiben und 2 Abfragen nutzen.
 
Ein SELECT reicht. Als erstes ORDER BY Argument nimmst du ein Vergleich mit 'Test'. Da True=1 und False=0 ist, musst du die Sortierung nach dem vergleich noch umdrehen

SQL:
...
ORDER BY 
	`name` = 'test' DESC, 
	`view` DESC, 
	`name` ASC

PS: name und view sind beides sehr ungeschickte Feldnamen, da es auch Wörter sind die von SQL verwendet werden...
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank, so funktioniert es perfekt:
Code:
SELECT id, name, view FROM users 
WHERE LCASE(name) LIKE LCASE('%Test%')
ORDER BY  LCASE(name)=LCASE('Test') DESC, `view` DESC
 

Neue Beiträge

Zurück