2010-06-10 6 views
2

Existe-t-il un moyen de commander les résultats de mysql par la première lettre et d'ignorer les nombres? Par exemple, j'ai une liste d'adresses:ORDER BY lettres et non les numéros d'un champ

  • 123 Main Street
  • 456 Second Street
  • 234 Third Street

et je veux commander par le nom de la rue et ignorer la rue nombre. Y a-t-il un moyen facile de faire ceci?

+0

Voulez-vous savoir comment faire en PHP ou MySQL? – randombits

+2

@VeeArr Il existe une façon d'aider les débutants à comprendre comment fonctionne le site sans être un imbécile. C'est à peu près le contraire de la façon dont vous l'avez fait. – cletus

Répondre

4

Il n'y a pas vraiment une façon propre à 100% fiable obtenez ce que vous voulez, sans le numéro et la rue étant divisé en deux champs différents.

Quelque chose comme order by SUBSTRING(address, LOCATE(' ', address)) vous amènera la plupart du temps là-bas.

Ce que cela fait est d'obtenir la sous-chaîne de l'adresse de la première occurrence d'un caractère d'espace à la fin. Effacement efficace de la «123» de «123 Main Street», de sorte que vous trier par «Main Street». Si vous avez quelque chose où il y a plusieurs espaces avant le nom de la rue ... bonne chance. Il n'y a pas vraiment grand-chose à faire d'un point de vue automatisé.

CECI NE SERA PAS TRÈS PERFORMANT DANS UN GRAND CADRE DB. Dans un environnement plus petit, cela ira probablement bien. Si votre environnement est plus grand ou que cela ne fonctionne pas pour vous, vous devrez configurer un travail qui divise le champ d'adresse en un autre champ à des fins de tri.

+0

+1 pour mentionner la division du champ. Cette IMHO serait la meilleure solution. L'actuel ne se met pas bien à l'échelle. –

2

En supposant que le numéro de rue et le nom de la rue sont toujours séparés par un espace.

SELECT ... 
... 
ORDER BY SUBSTRING(address, FIND_IN_SET(' ', address)+1) 
2

Bien que vous pouvez appliquer une sous-chaîne dans la clause ORDER BY (comme expliqué johncatfish), ressemble à vous redéfinissez desing cette table, séparant un champ que dans la rue et Nombre champs.

Selon ce scénario, la tâche devient facile:

SELECT Number, Street 
FROM Addresses 
ORDER BY Street, Number 
+0

+ 1 c'est l'approche que vous devriez prendre, pas ordonnée par une sous-chaîne. – cletus

Questions connexes