Hilfe bei LIKE Abfrage

Tommy57

Erfahrenes Mitglied
Hallo,

hab da mal zwei Fragen zu MySQL:

- Ich versuche das getroffene Wort, bzw die Länge von dem Wort, bei einer LIKE '%xyz%' Abfrage zu ermitteln, da in den gesuchten Spalten oft auch mehrere Wörter stehen können und ich kürzere Treffer für relevanter halte. Jemand eine Idee, wie man das elegant lösen kann?

- Kann ich eine LIKE Abfrage so formulieren, dass er jedes Wort am Anfang überprüft, also LIKE 'xyz%', aber für jedes Wort in der Spalte?

Gruß
 
Hi saftmeister,

mit regulären Ausdrücken hatte ich schon innerhalb von MySQL gearbeitet. Ich kann das mal ausprobieren, aber vermutlich wird das langsam sein. Ist ja für ne Autocomplete Funktion und sollte daher schnell sein. Die Tabellen Kollation ist general_ci, wegen Umlauten und Case Insensitiv, weiß gar nicht, ob das auch für reguläre Ausdrücke gilt.
 
Mit LIKE? Jepp, geht irgendwie mit viel verwirrungen und ORs und ANDs. Im Endeffekt werden Reguläre Ausdrücke schneller sein, gluab ich zumindest
 
Okay, klappt soweit wunderbar. Danke

So sieht das Ganze aktuell aus:
SQL:
SELECT name FROM my_table WHERE name REGEXP ?

$data = array(
    '[[:<:]]' . preg_quote($val),
);

Jetzt habe ich aber noch das Problem, dass die Kollation bewusst general_ci gewählt wurde, damit Umlaute getroffen werden können. Nicht jeder hat so n komisches ç auf seiner Tastatur. Wie krieg ich das jetzt hin, dass all diese Umlaute general_ci typisch mit einem normalen Buchstaben getroffen werden können?

Z.B.: curac sollte vervollständigen zu Blue Curaçao


Außerdem würde ich gerne die Ergebnisse nach der Länge des getroffenen Wortes aufsteigend sortieren. Jemand eine Idee, wie ich an das getroffene Wort (Curaçao) komme?
 
Zuletzt bearbeitet von einem Moderator:
Ich habe es lösen können und es ist ziemlich simpel.

SQL:
SELECT name FROM my_table WHERE name LIKE 'curac%' OR name LIKE '% curac%'
 
Zuletzt bearbeitet von einem Moderator:
Zurück