MySQL / Case-un-sensitive suchen
MiSo
- datenbank
Ich hab ne Anweisung, die ungefähr so aussieht:
SELECT * FROM DB, Tabelle WHERE CONCAT(a,b,c,d,e) LIKE '%xyz%'
Das Problem: das ganze führt eine case-sensitive suche durch.
Wenn ich normal suche mit "WHERE a LIKE '%xyz%'" findet das ding auch "XYZ", mit der oberen Anweisung nicht.
Was kann ich da machen?
Und bitte kein Gemecker wegen der overall-suche; die hab ich mir nicht ausgedacht - vom auftraggeber vorgegeben.
mfg
Micha
echo $begrüßung;
SELECT * FROM DB, Tabelle WHERE CONCAT(a,b,c,d,e) LIKE '%xyz%'
Das Problem: das ganze führt eine case-sensitive suche durch.
Wenn ich normal suche mit "WHERE a LIKE '%xyz%'" findet das ding auch "XYZ", mit der oberen Anweisung nicht.
Das Problem lässt sich bei mir mit MySQL Version 5.0.21 nur nachvollziehen, wenn eine der beteiligten Spalten binär ist, was beispielsweise bei BLOB der Fall ist. CONCAT() liefert dann einen "binary string" zurück, der case-sensitive durchsucht wird.
echo "$verabschiedung $name";
hi,
also ohne garantie würd ich 2 sachen vorschlagen :
1. versuch es mal mit
SELECT * , CONCAT(a,b,c,d,e) AS suchstr FROM DB, Tabelle
WHERE suchstr LIKE '%xyz%'
2. versuch mal mit having
SELECT * FROM DB, Tabelle HAVING CONCAT(a,b,c,d,e) LIKE '%xyz%'
nur mal 2 ideen
cu
kai
echo $begrüßung;
- versuch es mal mit
SELECT * , CONCAT(a,b,c,d,e) AS suchstr FROM DB, Tabelle
WHERE suchstr LIKE '%xyz%'
Funktioniert nicht, weil WHERE keine Aliasnamen haben möchte.
- versuch mal mit having
SELECT * FROM DB, Tabelle HAVING CONCAT(a,b,c,d,e) LIKE '%xyz%'
Funktioniert auch nicht. HAVING ist kein WHERE-Ersatz sondern hat Aufgaben im Zusammenhang mit Gruppierungen. Außerdem ändert es nichts an der case sensitivity der Suche.
echo "$verabschiedung $name";
yo,
Was kann ich da machen?
die Funktion UPPER um das CONCAT bilden und die Buchstaben im LIKE ausdruck gross schreiben.
Ilja
yo,
Was kann ich da machen?
die Funktion UPPER um das CONCAT bilden und die Buchstaben im LIKE ausdruck gross schreiben.
Ilja
upper bzw. lower(concat(...)) funktioniert leider nicht; hatt ich schon ausprobiert. man muss sämtliche spalten mit lower einzeln umwandeln, sprich concat(lower(a),lower(b),...)
mfg
Micha
echo $begrüßung;
die Funktion UPPER um das CONCAT bilden und die Buchstaben im LIKE ausdruck gross schreiben.
upper bzw. lower(concat(...)) funktioniert leider nicht; hatt ich schon ausprobiert. man muss sämtliche spalten mit lower einzeln umwandeln, sprich concat(lower(a),lower(b),...)
Der Grund wird das von mir vermutete Binärfeld sein. Binärdaten können nicht in Groß- oder Kleinbuchstaben umgewandelt werden. Da bei einem CONCAT(), bei dem ein Binärfeld beteiligt ist, ebenfalls ein Binärwert entsteht, lässt sich darauf LOWER()/UPPER() nicht mit Erfolg anwenden. Wenn man es auf die einzelnen Spalten anwendet, wird es mit den anderen Feldern gehen, nur nicht mit dem Binärfeld. So sich nicht generell der Typ des Feldes auf einen Nicht-Binär-Typ umstellen lässt, müsste es erst in einen Stringtyp gecastet werden, um darauf o.g. Stringfunktionen anwenden zu können.
echo "$verabschiedung $name";
Hi,
SELECT * FROM DB, Tabelle WHERE CONCAT(a,b,c,d,e) LIKE '%xyz%'
Das Problem: das ganze führt eine case-sensitive suche durch.
Evtl. ein Fulltext-Index auf die Spalten und dann ein matches ... against ...
cu,
Andreas