我打算建立一个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
有什么想法吗?
答案 0 :(得分: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”这样的后缀,以及跟随母亲姓氏的西班牙语国家,则会失败。
最安全当然是独立,明确的领域。用户必须向另一个字段添加标签的额外“成本”实际上可能小于必须弄清楚如何使用模糊字段的认知“成本”。
答案 1 :(得分:2)
将值存储在单独的列中。很容易将它连接在一起用于显示目的,而不是在填充表单时填充单独字段的真正困难......但它将使您更容易进行任何搜索和其他数据操作。
答案 2 :(得分:1)
如果这一切都在一列中,那么听起来你将不得不在查询中返回2列。第一个是名称as-is,第二个是名称的复杂字符串转换(可能会变丑)。按第二列排序,在结果应用程序中显示第一列。