2

我有一个带有字段的 InnoDB 表

firstname, lastname

在显示姓名时,通常只有名字就足够了。有时用户有相同的名字;所以我必须得到名字和姓氏的第一个字母:

CONCAT(firstname, ' ', SUBSTRING(lastname, 1, 1), '.')

有没有一种(高性能)方法可以在双名的情况下只显示姓氏的第一个字母?就像是

WHEN isDouble(Firstname) THEN 
      CONCAT(firstname, ' ', SUBSTRING(lastname, 1, 1), '.') 
      ELSE firstname

/* 编辑 */ 忘了提到我正在考虑的解决方案:

创建一个值为 1 或 0 的列“double_firstname”,并使用 CASE 语句进行选择。然后在用户创建和删除时更新 double_firstname 列。

4

2 回答 2

0

您当然可以询问 mysql 该名字的条目数是否大于一个,因此:

select IF( (select count(*) as cnt from person where firstname = p.firstname) > 1 
          , concat(firstname, " ", substring(lastname, 1))
          , firstname)
from person 
where id = 4711
;

但这不是很快。

对于更多的人来说,更好的是一个人如何“打电话”她的稳定标记。最初可能是“名字姓氏”,然后通过 cronjob 减少为名字,从而更加个人化。它也可能意味着只叫“John Doe”,因为他早早进入,“John DaSecond”叫“John D.”,“JohnDaThird”叫“John DaT.”。

在这种情况下,JohnD 并不是唯一的。

John Doe 是否被告知要更名为“John D.”?在你的场景中?

于 2013-05-26T20:58:00.797 回答
0

你要求良好的表现以及做到这一点的能力。如果您有names(firstname, lastname)以下索引应该表现良好:

select (case when exists (select 1
                          from names n2
                          where n2.firstname = n.firstname and n2.lastname <> n.lastname
                         )
             then concat(firstname, ' ', left(lastname, 1))
             else firstname
        end)
from names n
于 2013-05-26T22:21:39.010 回答