2010-07-13 7 views
1

Je prévois sur la construction d'une table mySQL qui nécessite le nom d'un étudiant qui ressemble à ceci:Trier la liste après le nom, puis le prénom?

Last Name + Father's First Name Initials + First Name 

Exemple:

Beavers L. Scott James (father has one first name, son has two first names) 
Beavers L. D. Scott (father has two first names) 

Au lieu d'exiger de remplir 3 champs d'entrée, je veux seulement un. Mais la question est, comment puis-je le trier? Je veux trier par "nom de famille" d'abord, puis par "prénom" et ensuite par les "initiales du père". Donc, deux étudiants avec des noms similaires trieraient comme suit:

1. Beavers F. Christian 
2. Beavers V. Scott James 
3. Beavers L. Scott Paul 
4. Beavers K. Sean 
5. Beavers Q. Sean 

Des idées?

Répondre

6

Ne pas munir vos données.

Stockez trois champs distincts: nom, prénom, initiales paternelles.

CATENATE Puis la sortie:

select concat(last_name, ' ', paternal_initials, ' ', first_name) as displayed_name 
from table 
order by last_name, paternal_initials, first_name; 

Mise à jour:

Je veux le rendre plus facile pour celui d'ajouter les informations et utiliser un champ de saisie. - Norbert

Mais les gens ne pensent pas de cette façon: nom de famille, initiales parentales, prénom.

Ils auront tendance à penser à deux entités distinctes: un étudiant, avec un nom, et le nom du père d'un élève.

Si vos utilisateurs sont dans une culture où les noms de famille viennent en dernier, vous pourrait avoir un champ Student's Name, et sur le terrain Father's Name, et supposons que le dernier mot dans chacun est le nom de famille. Bien sûr, cela échoue si les noms de famille sont suivis de suffixes comme "Jr", "Senior", ou "3rd", et pour les pays hispanophones qui suivent le nom de famille avec le nom de famille de la mère.

Le plus sûr est bien entendu des champs distincts et non ambigus. Le «coût» supplémentaire pour l'utilisateur d'avoir à tabuler dans un autre champ peut en fait être inférieur au «coût» cognitif de devoir trouver un moyen d'utiliser un champ ambigu.

+0

+1: Vous étiez beaucoup plus rapide que moi –

+0

Je veux que ce soit plus facile pour celui qui ajoute les informations et utilise un champ de saisie. – Norbert

+0

@Norbert: Alors vous aurez beaucoup de plaisir à essayer de faire respecter un format afin que vous puissiez analyser le nom correctement. Avec des milliards de formulaires de création de compte, est-ce vraiment un gros problème de séparer les parties d'un nom? –

1

Si tout cela est dans une colonne, il semble que vous allez devoir retourner 2 colonnes dans la requête. Le premier est le nom tel quel, le second est une transformation de chaîne complexe du nom (pourrait devenir moche). Ordre par la deuxième colonne, afficher le premier dans l'application de résultat.

2

Stockez les valeurs dans des colonnes séparées. Il est assez facile de concaténer ensemble à des fins d'affichage, et il n'est pas vraiment difficile de remplir des champs séparés lorsque vous remplissez un formulaire ... mais cela rendra toute recherche et toute manipulation de données beaucoup plus facile pour vous.

Questions connexes