wake-up-neo.com

'So was%' OR '% that%') und etwas = sonst 'funktioniert nicht

Ich habe eine Auswahlabfrage, bei der ich versuche, Zeichenketten nach mehreren Mustern zu durchsuchen

LIKE ('%this%' or '%that%' ) and something=else

Gibt null Ergebnisse zurück

Jedoch 

LIKE '%this%' and something=else

gibt Ergebnisse zurück und 

LIKE '%that%' and something=else

gibt das Ergebnis zurück

Ist es möglich, alle meine Ergebnisse in einer Abfrage zusammenzufassen? Wenn eine Zeichenfolge mit beiden übereinstimmt, wie wird sie damit umgehen?

33
Kevin Ohashi

Es wäre nett, wenn Sie könnten, aber Sie können diese Syntax nicht in SQL verwenden.

Versuche dies:

(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something = else

Beachten Sie die Verwendung von Klammern! Sie benötigen sie um den Ausdruck OR.
Ohne Klammern wird es als A OR (B AND C) analysiert, wodurch Sie nicht die erwarteten Ergebnisse erhalten.

70
Bohemian
Instead of using `LIKE` use `REGEXP`.

For example:

    REGEXP 'THIS|THAT'

For example:

    REGEXP 'THIS|THAT'
mysql> SELECT 'pi' REGEXP 'pi|apa';                     -> 1
mysql> SELECT 'axe' REGEXP 'pi|apa';                    -> 0
mysql> SELECT 'apa' REGEXP 'pi|apa';                    -> 1
mysql> SELECT 'apa' REGEXP '^(pi|apa)$';                -> 1
mysql> SELECT 'pi' REGEXP '^(pi|apa)$';                 -> 1
mysql> SELECT 'pix' REGEXP '^(pi|apa)$';                -> 0

Refer:
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
20
Nijat Asad

Versuchen Sie etwas wie:

WHERE (column LIKE '%this%' OR column LIKE '%that%') AND something = else

5
Dirk

Teilen Sie die LIKE-Klauseln in zwei separate Anweisungen auf, d.

(fieldname1 LIKE '%this%' or fieldname1 LIKE '%that%' ) and something=else
3
Ryan

Haben Sie etwas dagegen, es aufzuteilen?

...FROM <blah> 
   WHERE 
     (fieldA LIKE '%THIS%' OR fieldA LIKE '%THAT%') 
     AND something = else
2
josh.trow

Hast du es versucht:

(column LIKE '%this%' and something=else) or (column LIKE '%that%' and something=else)
1
BumbleB2na

Ich weiß, dass es eine etwas alte Frage ist, aber die Leute versuchen immer noch, eine effiziente Lösung zu finden. Stattdessen sollten Sie den FULLTEXT-Index verwenden (sie ist in MySQL 5.6.4 verfügbar).

Abfrage auf Tabelle mit + 35 mil-Datensätzen nach dreifach like, wobei der Block ~ 2.5s einnahm, aber nach dem Hinzufügen eines Index für diese Felder und der Verwendung von BOOLEAN MODE innerhalb von match ... against ... nur 0.05s.

0
Michal_Szulc