Je pense que cela devrait être mieux aller chercher le tableau d'entrées et ensuite effectuer une manipulation de texte sur les données récupérées (dans ce cas, une recherche)! Comme toute manipulation de texte ou requête complexe prend plus de ressources et que votre base de données contient beaucoup de données, la requête devient trop lente! De plus, si vous exécutez votre requête sur un serveur partagé, cela augmente les problèmes de performances!
Vous pouvez facilement accomplir ce que vous essayez de faire avec regex, une fois que vous avez récupéré les données de la base de données!
MISE À JOUR: Ma suggestion est la même, même si vous exécutez votre script sur un serveur dédié! Cependant, si vous voulez effectuer une recherche en texte intégral du mot "littéral" dans BOOLEAN MODE comme vous l'avez décrit, vous pouvez supprimer l'opérateur +
(car vous recherchez un seul mot) et construire la requête comme suit:
SELECT listOfColumsNames WHERE
MATCH (colName)
AGAINST ('literal*' IN BOOLEAN MODE);
Cependant, même si vous ajoutez l'opérateur AND, votre requête fonctionne correctement: testé sur Apache Server avec MySQL 5.1!
Je vous suggère de lire the documentation sur la recherche en texte intégral en mode booléen.
Le seul problème de cette requête est qu'il ne correspond pas au mot "literal" s'il s'agit d'une sous-chaîne dans un autre mot, par exemple: "textliteraltext". Comme vous l'avez remarqué, vous ne pouvez pas utiliser l'opérateur *
au début du mot!
Donc, pour accomplir ce que vous essayez de faire, le plus rapide et plus simple est de suivre la suggestion de Paul, en utilisant l'espace réservé %
:
SELECT listOfColumsNames
WHERE colName LIKE '%literal%';
vous pouvez toujours faire comme « %% littérale » si la performance n'est pas un problème –