多表查询以下两种方法那种更好一些?它们有什么区别?在数据库查询的时候有何影响?
(为了描述基本情况假设数据库中有如下两表)
说明:a表为用户表,b表为用户划分组a表中主要有userID,userName,userGroup,userRubbish (其它字段省略)
b表中主要有groupID,groupName (其它字段省略)方法一:
$sql="select
a.userID, //userID为用户的序列ID(主键)
a.userName, //userName为用户的登录名
b.groupName //groupName为组名称(如:普通用户;中级用户;高级用户)
from a_user as a inner join b_group as b On a.userGroup=b.groupID order by a.userID desc"; //userGroup的值为groupID中间循环步骤省略
================================================================================方法二:$sql="select * from a_user where userRubbish=0 order by userID desc"; //userRubbish为0的时候显示 为1的就不显示
$result=mysql_query($sql);
$rs=mysql_fetch_array($result);$groupID=$rs['userGroup'];
$sql="select * from b_group where groupID=$groupID";中间循环步骤省略
================================================================================
(两种方法中都有所省略)两种方法最后都可以实现:
用户ID 用户名 用户组
3 王五 普通用户
2 张三 普通用户
1 李四 中级用户多表查询以上两种方法那种更好一些?它们有什么区别?在数据库查询的时候有何影响?
(为了描述基本情况假设数据库中有如下两表)
说明:a表为用户表,b表为用户划分组a表中主要有userID,userName,userGroup,userRubbish (其它字段省略)
b表中主要有groupID,groupName (其它字段省略)方法一:
$sql="select
a.userID, //userID为用户的序列ID(主键)
a.userName, //userName为用户的登录名
b.groupName //groupName为组名称(如:普通用户;中级用户;高级用户)
from a_user as a inner join b_group as b On a.userGroup=b.groupID order by a.userID desc"; //userGroup的值为groupID中间循环步骤省略
================================================================================方法二:$sql="select * from a_user where userRubbish=0 order by userID desc"; //userRubbish为0的时候显示 为1的就不显示
$result=mysql_query($sql);
$rs=mysql_fetch_array($result);$groupID=$rs['userGroup'];
$sql="select * from b_group where groupID=$groupID";中间循环步骤省略
================================================================================
(两种方法中都有所省略)两种方法最后都可以实现:
用户ID 用户名 用户组
3 王五 普通用户
2 张三 普通用户
1 李四 中级用户多表查询以上两种方法那种更好一些?它们有什么区别?在数据库查询的时候有何影响?
a.userID, //userID为用户的序列ID(主键)
a.userName, //userName为用户的登录名
b.groupName //groupName为组名称(如:普通用户;中级用户;高级用户)
from a_user as a inner join b_group as b On a.userGroup=b.groupID
where a.userRubbish=0
order by a.userID desc"; //userGroup的值为groupID
一次性让数据库返回结果所而会快一下。如果没有相应的索引的情况下,第二种方法比较好。你可以人为的决定把哪个表做为外循环。
这样看来 第一种会好点
索引很关键还有select * from 之间的*号 最好用具体的字段名代替(这个是我从书本上看见的,尽量避免使用* )