未找到 last_name 值时查询不返回任何内容
Query not returning anything when no last_name value found
我刚刚构建了这个新的条件查询,用于根据 display_as
值提取 first_name
AND last_name
OR company_name
:
Select If(`display_as` = 'individual',
CONCAT(first_name, ' ', last_name)
,`company_name`) as name FROM `{$this->table}` WHERE `unique_id` = ? LIMIT 1
问题是,如果用户只有 first_name
值,而 last_name
有 no value
,则根本不会返回任何内容。
我该如何解决这个问题?
改为使用此查询。
$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";
试试这个:
Select
If( `display_as` = 'individual',
CONCAT(coalesce(first_name, ''), ' ', coalesce(last_name, ''))
,`company_name`) as name
FROM `{$this->table}`
WHERE `unique_id` = ?
LIMIT 1
我建议这样写:
select (case when display_as = 'individual'
then concat_ws(' ', first_name, last_name)
else company_name
end) as name
from `{$this->table}`
where unique_id = ?
limit 1; -- probably not needed
备注:
case
是条件逻辑的标准 SQL 结构。 if()
是定制的 MySQL 扩展。
concat_ws()
优雅地处理名称中的 NULL
值。它只是忽略值而不是返回 NULL
.
- 并非所有地方都需要反引号。它们只会让查询更难编写和阅读。
- 如果你的
unique_id
真的很独特,你就不需要LIMIT 1
。
我刚刚构建了这个新的条件查询,用于根据 display_as
值提取 first_name
AND last_name
OR company_name
:
Select If(`display_as` = 'individual',
CONCAT(first_name, ' ', last_name)
,`company_name`) as name FROM `{$this->table}` WHERE `unique_id` = ? LIMIT 1
问题是,如果用户只有 first_name
值,而 last_name
有 no value
,则根本不会返回任何内容。
我该如何解决这个问题?
改为使用此查询。
$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";
试试这个:
Select
If( `display_as` = 'individual',
CONCAT(coalesce(first_name, ''), ' ', coalesce(last_name, ''))
,`company_name`) as name
FROM `{$this->table}`
WHERE `unique_id` = ?
LIMIT 1
我建议这样写:
select (case when display_as = 'individual'
then concat_ws(' ', first_name, last_name)
else company_name
end) as name
from `{$this->table}`
where unique_id = ?
limit 1; -- probably not needed
备注:
case
是条件逻辑的标准 SQL 结构。if()
是定制的 MySQL 扩展。concat_ws()
优雅地处理名称中的NULL
值。它只是忽略值而不是返回NULL
.- 并非所有地方都需要反引号。它们只会让查询更难编写和阅读。
- 如果你的
unique_id
真的很独特,你就不需要LIMIT 1
。