从MySQL中选择--只从姓氏中选择首字母。

问题描述 投票:1回答:3

当我从数据库中进行选择时,我有一个问题。

我的一个表中的一列包含了persons中的名字。假设它看起来像这样。

 1. John Smith
 2. William Thorne
 3. Mark Johanson

好吧,我已经给你看了一些随机名字的例子。

问题是,名字和姓氏都在同一列中,当我在我的php文件中进行选择时,我想得到的结果是这样的。

1. John S.
2. William T.
3. Mark J.

我想从每个人的姓中只显示姓的首字母。有没有可能做到这一点?如果有,任何帮助将是巨大的。

我的代码选择的例子是在这里。

$result = mysql_query("SELECT * FROM feedback_rate 
                       WHERE accept=1 
                       ORDER BY date DESC 
                       LIMIT $start,$rows_per_page",$con);

先谢谢你的帮助

php mysql select
3个回答
4
投票

你必须意识到,这是极难做对的。计算机不知道名字,它们不知道什么是名,什么是姓。因此,你必须做一些假设,而这些假设并不总是正确的。我做的假设是,名字永远只有一个。那么在PHP中用下面的步骤很容易解决。

  1. 把名字分成几个字
  2. 改掉最后一个字。
  3. 再把它们放回一起。

这就是如何做到的。

$parts = explode(' ',$fullName);
$firstName = array_pop($parts);
$initial = substr($firstName,0,1);
array_push($parts,$initial.'.');
$fullName = implode(' ',$parts);

现在$fullName将包含你想要的东西. 代码看起来有点长,但那是因为我试图一步一步地展示它。


1
投票

最好是在PHP中操作数据(保持原始数据不受影响,这总是好的做法)。

$name = "John Sephre";
$expl = explode(' ', $name);

echo $expl [0].' '.$expl[1][0];

输出。

John S

如果你的名字很长

$name = "John Sephre More";
$expl = explode(' ', $name);

$last = end($expl);

echo $expl[0].' '.$last[0];

输出:

John M

另外,我建议创建一个函数来实现这个目的。

function makeShortName($fullName)
{
    $expl = explode(' ', $fullName);

    $shortened = $expl[0];

    if(count($expl) > 1)
    {
        $last = end($expl);
        $shortened .= ' '.$last[0].'.';
    }

    return $shortened;
}

所以如果你只传递 John 它将返回 John 而如果你通过 John nickname Surname 结果将是 John S.


0
投票

我发现这是最简单的处理方法。它只是在字符串的最后一个字上创建一个首字母。这就允许双桶姓,比如'van Dyke',变成'van D'。请注意,连字符的名字仍然会被缩减为第一个字符,但这不太可能成为一个问题。如果字符串中只有一个字,它将不会被初始化。三行简单的代码。

$nameparts = explode(' ',$fullname);
if(count($nameparts) > 1) $nameparts[count($nameparts)-1] = substr($nameparts[count($nameparts)-1],0,1);
$fullname = implode(' ',$nameparts);
© www.soinside.com 2019 - 2024. All rights reserved.