0
votes

Trouver des sous-chaînes SQL

Je sais que l'opérateur existe pour trouver des sous-chaînes - et je cherche une solution si elle existe peut enregistrer / réduire les lignes de code.

scénario:

  1. Table des utilisateurs avec un nom de colonne représentant le nom complet des utilisateurs.

    • John Doe
    • John orthographe
    • rob lowe
    • Rob Williams
    • API - ".... /? Nom =" Rob DOE "

      Je peux diviser la chaîne "Rob DOE" par des espaces et exécuter deux requêtes: xxx

      ma question - y a-t-il dans MySQL une construction dans la fonctionnalité / macro qui peut faire cela pour moi en 1 dB appel? au lieu de 2 ou plus en fonction du nombre de mots de la chaîne donnée?


4 commentaires

Pourquoi pas SELECT * à partir des utilisateurs où nom comme "% robose%" ou nom comme "% DOE%"


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 et voici un endroit idéal pour Démarrer 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


@ 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) ...


4 Réponses :


1
votes

SQL DEMO strong>

SELECT DISTINCT Name


0 commentaires

-1
votes

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
    }
}


0 commentaires

0
votes

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 Exploser () Les mots en fonction des espaces, puis construisez une instruction SQL basée sur le commentaire de Splash58. Donc ... xxx

vous donnerait xxx

si j'utilise MySQLI_, vous utiliseriez des déclarations préparées avec comme Beaucoup de pièces dont vous avez besoin ... xxx


0 commentaires