Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête de recherche MySQL pour le nom séparé par des virgules

Oui, s'il y a une possibilité, vous pouvez mettre les deux last, first et first last dans la base de données, le mieux est de concevoir correctement votre schéma.

Si vous jamais vous retrouvez à essayer de rechercher ou de manipuler des pièces de colonnes, votre schéma est presque certainement cassé. Cela tuera presque certainement les performances.

La bonne façon est d'avoir le tableau ainsi :

T1  FirstName  LastName
==  =========  ========
 1  Pax        Diablo
 2  Bob        Smith
 3  George     Jones

Ensuite, vous pouvez diviser plus efficacement le nom saisi par l'utilisateur (une fois, avant d'exécuter la requête) plutôt que d'essayer de diviser chaque nom dans la base de données.

Dans le cas où la base de données contient toujours last, first , cela peut ne pas être nécessaire pour un changement de schéma.

Le problème que vous rencontrez dans ce cas consiste simplement à interpréter ce que l'utilisateur a saisi.

Une possibilité, bien que ce soit un tueur de performances, est de faire un like pour chaque mot séparé. Donc, si l'utilisateur a saisi pax diablo , votre requête résultante pourrait être :

select T1 from mytable
    where T2 like '%pax%'
      and T2 like '%diablo%'

De cette façon, vous vous souciez moins de la commande.

Cependant, étant donné que je n'aime pas les requêtes lentes, j'essaierais d'éviter cela à moins que cela ne soit absolument nécessaire (ou votre base de données est relativement petite et susceptible de le rester).

Il existe toutes sortes de façons d'accélérer ce type de requêtes, telles que :

  • en utilisant les fonctionnalités de recherche en texte intégral dont dispose votre SGBD.
  • émuler ces capacités en extrayant et en stockant des mots lors des déclencheurs d'insertion/mise à jour (et en les supprimant lors des déclencheurs de suppression).
  • ce cas précédent, mais en veillant également à ce que des colonnes supplémentaires soient utilisées avec des valeurs en minuscules de la colonne actuelle (pour la vitesse).
  • indiquer à l'utilisateur qu'il doit utiliser le last, first formulaire de recherche.
  • essayer d'éviter le %something% rechercher la chaîne autant que possible (avec something% , les index peuvent toujours être utilisés).
  • ma méthode "diviser le nom en deux colonnes" mentionnée précédemment.