多表查询以下两种方法那种更好一些?它们有什么区别?在数据库查询的时候有何影响?
(为了描述基本情况假设数据库中有如下两表)
说明: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         李四       中级用户多表查询以上两种方法那种更好一些?它们有什么区别?在数据库查询的时候有何影响?

解决方案 »

  1.   

    如果相关的索引都有的话 从查询效率上看几乎一样。你的第一个需要把条件也加上。$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 
    where a.userRubbish=0
    order by a.userID desc";   //userGroup的值为groupID
    一次性让数据库返回结果所而会快一下。如果没有相应的索引的情况下,第二种方法比较好。你可以人为的决定把哪个表做为外循环。
      

  2.   

    第二种方法就可以看做 select * from b_group where groupID=(*,*,*,*。)
    这样看来 第一种会好点 
    索引很关键还有select * from  之间的*号 最好用具体的字段名代替(这个是我从书本上看见的,尽量避免使用* )