在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
中,而是存储一个包含相关表名的字符串,以及该表中要提取的列名。。。然而,我不能保证它会比另一个答案更快;可能是这样,但我还没有对其进行基准测试。