繁体   English   中英

MySQL根据表列中的值返回不同的字符串

[英]MySQL return different string based on values in table columns

我创建了以下用于提取用户首选名称的函数:

public function getPreferredName($unique_id) {

    $sql = "SELECT CONCAT(first_name, ' ', last_name) as name FROM `{$this->table}` WHERE `unique_id` = ? LIMIT 1";
    $stmt = $this->pdo->prepare($sql);
    $stmt->execute([$unique_id]);

    if ($stmt->rowCount() == 0) return null;

    $preferredName = $stmt->fetchColumn();

    return $preferredName;

}

该表是由个人和公司组成的“用户”表。

我想在此查询中考虑一些其他字段:

  • “display_as”(个人或公司)
  • “company_name”(在display_as = company时使用)

现在我想修改上面的方法,根据“display_as”列的值是否等于“个人”或“公司”,返回名字和姓氏或公司名称。

如果“display_as”等于“individual”,则返回first_name和last_name字段。

如果“display_as”等于“company”,则返回company_name字段。

如何修改上述方法以同时返回first_name和last_name,或者根据“display_as”列返回company_name值?

谢谢您的帮助。 干杯

你可以使用MySQL IF函数

$sql = "Select If(`display_as` = 'individual',
        CONCAT(IFNULL(first_name,''), ' ', IFNULL(last_name,''))
       ,`company_name`) as name FROM `{$this->table}` WHERE `unique_id` = ? LIMIT 1";

这是有效的,因为您只有两个选项,个人或公司。
如果您有更多选项,则必须case when构造case when使用case when

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM