这个MySQL查询是最好的主意吗?

时间:2008-12-07 18:15:48

标签: php mysql optimization

我正在处理的项目有两种类型的帐户,“people”和“companies”。

我持有一个包含所有帐户的“users”表格,以及登录所需的基本信息(电子邮件,通行证等)以及另外两个表格“user_profiles”(普通人)和“company_profiles”(公司)为每种类型保留更多特定列,这两个表通过“users”列链接到常规“profile_user_id”表。

但是,每当我想列出可以是人和公司的用户时,我都会使用:

select user_id, user_type, concat_ws('', concat_ws(' ', user_profiles.profile_first_name, user_profiles.profile_last_name), company_profiles.profile_company_name) as user_fullname”。

当我列出这些用户时,我知道他们是“user_type”的人还是公司。

我的方法是使用concat_ws正确(最佳)吗?我这样做而不是select每个*_name,以避免返回超出必要数量的列。

由于

编辑:上面的查询继续如下:from users left join user_profiles on ... left join company_profiles on ...

2 个答案:

答案 0 :(得分:5)

select
 u.user_id, u.user_type, concat_ws(profile_first_name + profile_last_name) as full_name
from 
 users u, user_profiles up
where u.key = up.key
 and u.user_type = 'user'

union

select
 u.user_id, u.user_type, concat_ws(profile_first_name + profile_last_name) as full_name
from 
 users u, company_profiles cp
where u.key = cp.key
 and u.user_type = 'company'

答案 1 :(得分:1)

您的查询是否有效?您是否因使用此方法而遇到性能问题?

除非使用上述查询的时间比您预期的要长或者在调用此信息的软件中引起问题,否则这可能是预先成熟的优化。

有一点需要注意,您第一次使用CONCAT_WS时没有分隔符,因此公司名称将与此人的姓名合并。