2010-07-13 34 views
1

我打算建立一个需要学生姓名MySQL表看起来像这样:排序列表后姓氏,然后名字?

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

例子:

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

,而不是要求填写3个输入字段,我只想一。但问题是,我如何分类?我想先按“姓”排序,然后按“名”排序,然后按“父亲姓名缩写”排序。所以有两个名字相似的学生会这样排序:

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

任何想法?

回答

6

请勿混淆您的数据。

存储三个单独的字段:姓氏,名字,父代首字母。

然后链状输出:

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

更新:

我想让它更容易为一个增加的信息,并使用一个输入字段。 - 诺伯特

但人们不这样认为:姓氏,父母的名字缩写,名字。

他们往往会想到两个独立的实体:一个学生,一个名字,一个学生的父亲的名字。

如果你的用户是一种文化,姓氏放在最后,你可能Student's Name,和现场Father's Name,并且假设在每个最后一个字是姓。当然,如果姓氏后面跟着诸如“Jr”,“Senior”或“3rd”之类的后缀,并且母亲的姓氏跟随姓氏的讲西班牙语的国家,这也会失败。

当然最安全的是单独的,明确的领域。用户必须选择另一个字段的额外“成本”实际上可能小于必须弄清楚如何使用模糊字段的认知“成本”。

+0

+1:你比我的方式更快 – 2010-07-13 21:27:48

+0

我想让添加信息和使用一个输入字段的人更容易。 – Norbert 2010-07-13 22:06:39

+0

@Norbert:然后你会有很多乐趣试图强制执行格式,所以你可以一致地解析名称。凭借数十亿的账户创建表格,拆分名称部分真的是一件大事吗? – 2010-07-13 23:03:46

1

如果这是所有在一个列中,那么它听起来像你将不得不返回查询中的2列。第一个名称是原样,第二个是名称的复杂字符串转换(可能会变丑)。按第二列排序,显示结果应用程序中的第一个。

2

将值存储在单独的列中。将它们连接在一起用于显示目的很容易,而且在填充表单时不需要填写单独的字段,但它会使得任何搜索和其他数据操作变得更加容易。

相关问题