2010-06-26 5 views
0

Je dois rechercher l'utilisateur selon la ville mais mon problème est que dans le tableau d'utilisateur dans city le champ il y a deux villes comme arizona @ losvegas, parce que dans l'enregistrement l'utilisateur peut choisir deux villes .Comment rechercher la ville dans un enregistrement dans MySQL

Alors, comment puis-je faire une recherche par nom de ville?
Comme si quelqu'un cherche pour tous les utilisateurs de arizona ...

Je l'ai fait en utilisant LIKE dans SELECT requête mais je veux une autre méthode pour le faire.

+0

ne serait-il pas mieux pour chaque rangée d'avoir une ville? faciliter les recherches – ggfan

Répondre

0

Je prends ici une supposition farfelue et je suppose que le problème des affiches est qu'il peut également correspondre à des villes qui sont contenues dans d'autres villes (ne peut pas penser à un tel exemple cependant). Pour y remédier, on pourrait utiliser trois prédicats comme ceci:

WHERE city LIKE '[email protected]%' 
OR city like '%@arizona' 
OR city like 'arizona' 

À mon avis, cependant, la combinaison de deux villes dans une colonne est une mauvaise conception en premier lieu. Pourquoi ne pas faire deux colonnes, faire une rangée pour chaque ville ou faire une table supplémentaire qui relie les villes aux utilisateurs.

0

Eh bien, la façon évidente est d'utiliser comme. Je ne sais pas pourquoi vous ne voulez pas l'utiliser:

select * from users where city like '%arizona%'; 

Peut-être que vous pouvez dire pourquoi vous essayez d'éviter COMME et quelqu'un va essayer de vous donner quelques idées. Si ce dont vous avez besoin est un meilleur matcher de modèle que LIKE vous pouvez utiliser l'opérateur REGEXP.

+0

Je l'ai déjà fait par cette méthode je veux une autre méthode –

+1

La question demeure: pourquoi? Quel est le problème avec LIKE? –

+0

je veux savoir autre méthode à cette question, leur est-ce une autre manière de faire ceci? –

0

Je suis un peu confus quant aux raisons pour lesquelles la base de données n'a pas plusieurs tuples de ville pour chaque utilisateur. Mais, si vous voulez un plus puissant moyen de faire une recherche dans MySQL, vous pouvez effectuer une recherche par texte en colonnes avec regular expressions:

SELECT name FROM employees WHERE name RLIKE 'P$' 

Cela correspond aux noms des employés qui se terminent par P depuis le $ est la fin de l'ancre de chaîne. Vous pouvez aussi faire des choses comme:

SELECT username FROM userTable WHERE city RLIKE '[Mm]assachusett?s' 

... si, Dieu nous en garde, les gens ne savent pas du Massachusetts a deux « t pour ou quelque chose.

Les expressions régulières sont très puissantes, donc si vous voulez l'utiliser, vous pouvez le faire. Mais pour être honnête, compte tenu de ce que vous cherchez, en utilisant LIKE '%arizona%' fonctionne parfaitement bien.

Questions connexes