J'ai une requête select où j'essaie de rechercher des modèles dans plusieurs chaînes
LIKE ('%this%' or '%that%' ) and something=else
Renvoie zéro résultat
Toutefois
LIKE '%this%' and something=else
renvoie les résultats .__ et
LIKE '%that%' and something=else
renvoie le résultat
Est-il possible de regrouper tous mes résultats en une seule requête? Si une chaîne correspond aux deux, comment va-t-il gérer cela?
Ce serait bien si vous le pouviez, mais vous ne pouvez pas utiliser cette syntaxe dans SQL.
Essaye ça:
(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something = else
Notez l'utilisation des crochets! Vous en avez besoin autour de l'expression OR
.
Sans crochets, il sera analysé avec A OR (B AND C)
, ce qui ne vous donnera pas les résultats que vous attendez.
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
Découpez les clauses LIKE
en 2 déclarations distinctes, à savoir:
(fieldname1 LIKE '%this%' or fieldname1 LIKE '%that%' ) and something=else
Avez-vous quelque chose contre la division?
...FROM <blah>
WHERE
(fieldA LIKE '%THIS%' OR fieldA LIKE '%THAT%')
AND something = else
As-tu essayé:
(column LIKE '%this%' and something=else) or (column LIKE '%that%' and something=else)
Je sais que la question est un peu ancienne, mais que les gens essaient toujours de trouver une solution efficace, vous devriez plutôt utiliser FULLTEXT index (disponible à partir de MySQL 5.6.4).
Requête sur table avec + 35mil enregistrements par triple like
dans où le bloc a pris ~ 2.5s mais après avoir ajouté l'index sur ces champs et utilisé BOOLEAN MODE inside match ... against ...
, il n'a fallu que 0.05s.