MiSo: MySQL / Case-un-sensitive suchen

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

--
viel Spass: ie:{ fl:) br:> va:( ls:[ fo:) rl:? n4:{ ss:{ de:> js:} ch:? sh:( mo:) zu:]
  1. 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";

  2. 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

    1. echo $begrüßung;

      1. 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.

      1. 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";

  3. yo,

    Was kann ich da machen?

    die Funktion UPPER um das CONCAT bilden und die Buchstaben im LIKE ausdruck gross schreiben.

    Ilja

    1. 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

      --
      viel Spass: ie:{ fl:) br:> va:( ls:[ fo:) rl:? n4:{ ss:{ de:> js:} ch:? sh:( mo:) zu:]
      1. 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";

  4. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.