Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这个MySQL查询是最好的主意吗?_Php_Mysql_Optimization - Fatal编程技术网

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

Php 这个MySQL查询是最好的主意吗?,php,mysql,optimization,Php,Mysql,Optimization,我正在处理的项目有两种类型的帐户,“人”和“公司” 我拥有一个包含所有帐户和登录所需基本信息(电子邮件、通行证等)的“users”表,以及另外两个表“user\u profiles”(普通人)和“company\u profiles”(公司),这两个表分别为每种类型保留了更具体的列,这两个表都链接到了通用数据库通过“profile\u user\u id”列的“users”表 但是,每当我想列出既可以是个人也可以是公司的用户时,我都会使用: “选择用户id、用户类型、公司名称(“”,公司名称(“

我正在处理的项目有两种类型的帐户,“
”和“
公司

我拥有一个包含所有帐户和登录所需基本信息(电子邮件、通行证等)的“
users
”表,以及另外两个表“
user\u profiles
”(普通人)和“
company\u profiles
”(公司),这两个表分别为每种类型保留了更具体的列,这两个表都链接到了通用数据库通过“
profile\u user\u id
”列的“
users
”表

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

选择用户id、用户类型、公司名称(“”,公司名称(“”,用户配置文件.profile.first\u name,用户配置文件.profile.last\u name)、公司配置文件.profile.company\u name)作为用户全名

当我列出这些用户时,我通过“
user\u type
”知道他们是个人还是公司

我使用的
concat\u ws
方法是正确的(最佳的)方法吗?我这样做,而不是
select
-ing every
*\u name
,以避免返回超过需要的列

谢谢


编辑:上面的查询继续如下:
来自用户的左加入用户配置文件在…左加入公司配置文件在…

您已经进行了查询吗?您是否已经在使用此方法时遇到性能问题

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'
除非使用上述查询的时间比您预期的要长,或者导致调用此信息的软件出现问题,否则这可能是预成熟的优化


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

您已经有了查询功能吗?您是否已经在使用此方法时遇到性能问题

除非使用上述查询的时间比您预期的要长,或者导致调用此信息的软件出现问题,否则这可能是预成熟的优化


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

考虑到这两个
配置文件
表具有不相交的
用户集
,因为用户可以是
公司
,是否应该使用联合解决方案比我最初的concat想法更好?运行一个解释计划,看看关系数据库用于处理集合的区别。两个查询最终都进行了两次联接。这一次更明确、更容易理解,IMHO。考虑到两个
配置文件
表都有不相交的
用户集,因为一个用户可以是
用户son
或a
公司
,UNION解决方案比我最初的concat想法好吗?运行一个解释计划,看看关系数据库用于处理集合的差异。两个查询最终都进行了两次连接。这一次更明确、更容易理解,IMHO。我上面写的查询已经起作用了,我只是在质疑它的最佳性y、 第一个concat_ws没有分隔符的原因是,我实际上是在将users表加入到user_profiles和company_profiles后,将两列合并,其中一列我知道为NULL。因此,如果您不希望单个用户条目同时存在user_profile和company_profile信息,那么可以执行类似以下操作“斯蒂芬·科尔伯特,喜剧中心“那么MSON的查询就最好了。我上面写的查询已经可以运行了,我只是在质疑它的最佳性。第一个concat_ws没有分隔符的原因是,我实际上是在将users表加入到user_profiles和company_profiles后,将两个列合并,其中一个我知道是NULL。因此,如果您不希望单个用户条目同时存在user_profile和company_profile信息,那么“史蒂芬·科尔伯特,喜剧中心”那么MSON的提问将是最好的。