Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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
在mysql或php中执行if_Php_Mysql_Database Design_If Statement - Fatal编程技术网

在mysql或php中执行if

在mysql或php中执行if,php,mysql,database-design,if-statement,Php,Mysql,Database Design,If Statement,我有三张桌子: -使用者 -超级用户 -特种兵 SpecialUser和SuperUser是User表的扩展。假设User表有{name,email},SuperUser有{idUser,superPower},specialUser有{idUser,hairColor} 当然,SpecialUser和SuperUser从用户表中有一个name和email。这意味着用户可以是超级用户或特殊用户 我的问题是如何执行一个查询来获取用户的所有信息(在查询之前我不知道他是specialUser还是Sup

我有三张桌子:

-使用者

-超级用户

-特种兵

SpecialUser
SuperUser
User
表的扩展。假设
User
表有{
name
email
},
SuperUser
有{
idUser
superPower
},
specialUser
有{
idUser
hairColor
}

当然,
SpecialUser
SuperUser
从用户表中有一个
name
email
。这意味着用户可以是
超级用户
特殊用户

我的问题是如何执行一个查询来获取用户的所有信息(在查询之前我不知道他是specialUser还是SuperUser)

我想到了两种方法:

-将列“userType”(0:他是specialUser,1:他是超级用户)放入用户表中

使用这个方法,我应该使用IF-inside进行MySQL查询吗?(问题是什么)。或者我应该执行简单的查询(单独获取用户表),然后在PHP中执行if并查询正确的表(超级表或特殊表)

-不放置任何列并在用户id上使用2个连接执行MySQL查询(从技术上讲,2个连接中的一个不会返回任何内容)


应该使用哪一种?(我关心的是速度性能,而不是内存-假设表有超过100万行)

我将如何在伪sql中做到这一点:

Select * from user
left outer join superuser
left outer join specialuser
把所有的东西都还给我。如果超级用户的字段不为空,那么在PHP中可以对其进行操作,specialuser也是如此。这给了你两个好处:

1) 你不再需要一个字段来说明用户是什么类型的用户,加入的内容会告诉你


2) 如果您愿意,您可以让一个用户同时成为超级用户和特殊用户。(如果您不希望发生这种情况,可以使用约束或类似的方法来防止)

在不进行分支的情况下执行此操作可能会很棘手,尽管我有一个想法;既然你说记忆不是问题, 但性能是很重要的

首先,在
User
表中创建一列,并按照建议将其命名为
userType
,然后将表名的内容和表列存储在可解析的字符串中,如:

(超级用户/特殊用户),(“超级用户,超级大国”/“超级用户,发型师”)

例如:

“超级用户,idUser,superPower”//对于超级用户

在psuedo代码中:

SELECT `userType` FROM `usersTable` WHERE name = [put var here]
Let the returned value be valRet
parse the valRet into an array... //the first value is the table name, the remaining values are column names
make a second sql query based on the array
就性能而言,我认为这是好的,因为没有分支。但是,我不确定字符串解析会对性能造成什么样的影响。尝试在数千个查询上对其进行基准测试以查看

//请在此处查看类似问题的答案:

@BabyAzerty从概念上讲是的。。。但是编程并不困难,它不是将1或0存储在
userType
中,而是存储一个包含相关表名的字符串,以及该表中要提取的列名。。。然而,我不能保证它会比另一个答案更快;可能是这样,但我还没有对其进行基准测试。