Je sais que l'opérateur existe pour trouver des sous-chaînes - et je cherche une solution scénario: P> Table des utilisateurs avec un nom de colonne représentant le nom complet des utilisateurs. P>
API - ".... /? Nom =" Rob DOE " P> LI>
ol> Je peux diviser la chaîne "Rob DOE" par des espaces et exécuter deux requêtes: p> ma question - y a-t-il dans MySQL une construction dans la fonctionnalité / macro qui peut faire cela pour moi en 1 dB appel? em> strong> au lieu de 2 ou plus en fonction du nombre de mots de la chaîne donnée? P> P>
4 Réponses :
Vous pouvez diviser la chaîne et construire une seule requête.
$string = 'Rob Doe'; $query = 'SELECT * FROM Users WHERE 0'; $words = explode($string); foreach ($words as $word) { if (($word = trim($word))) { $query .= sprintf(" OR (name LIKE '%s')", mysql_real_escape_string($word)); //Please escape as you want instead of mysql_real_escape_string } }
sans savoir quelle interface de base de données votre utilisation, il est difficile de faire une version de déclaration préparée appropriée de ce code (j'ai ajouté une version mysqli_ à la fin de la réponse).
He simple idée serait de vous donnerait p> si j'utilise MySQLI_, vous utiliseriez des déclarations préparées avec comme Beaucoup de pièces dont vous avez besoin ... p> Exploser () Code> Les mots en fonction des espaces, puis construisez une instruction SQL basée sur le commentaire de Splash58. Donc ... p>
Vous pouvez utiliser un Index Fulltext Code>
comme:
p> alors votre requête sera simplement: p> résultat: p> Voir sur dB violon < / a> p> Un autre moyen assez simple consiste à convertir votre chaîne d'entrée en une expression régulière et à utiliser Cela reviendra le même résultat, mais nécessite une balayage de table / index complète. P> vue sur db violon p> p> rfint code>: p>
Pourquoi pas
SELECT * à partir des utilisateurs où nom comme "% robose%" ou nom comme "% DOE%" code>
N'est pas clair ce que vous voulez., Montrez le schéma DB US, des échantillons de données, de la sortie actuelle et attendue. Veuillez lire Comment à poser b> et voici un endroit idéal pour Démarrer B> pour savoir comment améliorer la qualité de votre question et obtenir de meilleures réponses. Comment créer un exemple minimal, complet et vérifiable B>
@ Splash58 "Rob DOE" a été un exemple d'entrée utilisateur du côté client et peut être n'importe quoi - en code (langue de votre préférence), vous divisez la chaîne et la boucle à travers les mots qui envoient chacun indépendamment la requête en tant que variable.
Utilisez foreach (Preg_split ('/ \ s + /', $ entrant) ...