MySQL 多表查询(求解)! 有<<耐心>>的高手请进!

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

多表查询以上两种方法那种更好一些?它们有什么区别?在数据库查询的时候有何影响?
...全文
101 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxg353 2009-05-07
  • 打赏
  • 举报
回复
第二种方法就可以看做 select * from b_group where groupID=(*,*,*,*。。。。)
这样看来 第一种会好点
索引很关键

还有select * from 之间的*号 最好用具体的字段名代替(这个是我从书本上看见的,尽量避免使用* )
ACMAIN_CHM 2009-05-07
  • 打赏
  • 举报
回复

如果相关的索引都有的话 从查询效率上看几乎一样。你的第一个需要把条件也加上。

$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


一次性让数据库返回结果所而会快一下。

如果没有相应的索引的情况下,第二种方法比较好。你可以人为的决定把哪个表做为外循环。

57,062

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧