php如何关联两个或者多个数据表?
比如有两个数据表:users(用户资料),posts(帖子)users的字段:user_id(主键),name(外主键),photo(头像图片路径),pwd,qqpost...
比如有两个数据表:users(用户资料),posts(帖子)
users的字段:user_id(主键),name(外主键),photo(头像图片路径),pwd,qq
posts的字段:post_id,title,contents,name(users表的外主键)
以上两个表是为了防止数据库数据的冗余,根据范式做的,所以posts表里面不能有photo和qq
需要呈现的帖子的页面效果是:左边显示帖子的用户名和该用户名的qq,左边显示该帖子的标题内容等
为了达到以上页面效果,我现在的做法是:分别先后访问两个数据表,比如先访问posts(帖子)这个表,获取其中的所有的帖子的信息,包括发帖人的name(users表的外键)。然后拿着name去访问users表,获取users表中的photo(头像路径)和qq号。这样,所有要显示的信息都有了。
我的问题是:有没有其他更好的方法去获取这些信息,比如先获取posts(帖子)的信息,users的信息自动的关联过来。mysql有没有这样的关联的功能?具体要怎么做?或者你有其他的思路--》是什么呢?大侠
右边显示帖子的内容------更正问题中的错别字 展开
users的字段:user_id(主键),name(外主键),photo(头像图片路径),pwd,qq
posts的字段:post_id,title,contents,name(users表的外主键)
以上两个表是为了防止数据库数据的冗余,根据范式做的,所以posts表里面不能有photo和qq
需要呈现的帖子的页面效果是:左边显示帖子的用户名和该用户名的qq,左边显示该帖子的标题内容等
为了达到以上页面效果,我现在的做法是:分别先后访问两个数据表,比如先访问posts(帖子)这个表,获取其中的所有的帖子的信息,包括发帖人的name(users表的外键)。然后拿着name去访问users表,获取users表中的photo(头像路径)和qq号。这样,所有要显示的信息都有了。
我的问题是:有没有其他更好的方法去获取这些信息,比如先获取posts(帖子)的信息,users的信息自动的关联过来。mysql有没有这样的关联的功能?具体要怎么做?或者你有其他的思路--》是什么呢?大侠
右边显示帖子的内容------更正问题中的错别字 展开
3个回答
展开全部
至少三个方法可以实现:
一、使用视图来实现多表联合查询,
例如:创建视图:create view userstoposts as select u.name,u.qq,p.post_id,p.title, p.contents, p.contents from users as u,posts as p where u.name=p.name
二、直接使用表联合查询
例如:select u.name,u.qq,p.* from users as u,posts as p where u.name=p.name
三、结合PHP语言实现
例:1、
<?php
$Sql="select *from posts";
$Result=@mysql_query($Sql);
while($rows=mysql_fetch_assoc($Result)){
$sql1="select name,qq from users where name='".$rows['name']."'";
$result1=@mysql_query($sql1);
$rows1=mysql_fetch_assoc($result1);
$OUTPUT[]=array(
'name'=>$rows['name'],
'qq'=>$rows1['qq'],
'post_id'=>$rows['post_id'],
'title'=>$rows['title'],
'contents'=>$rows['contents']
);
}
print_r($OUTPUT);//可以你需要的结果输出
?>
一、使用视图来实现多表联合查询,
例如:创建视图:create view userstoposts as select u.name,u.qq,p.post_id,p.title, p.contents, p.contents from users as u,posts as p where u.name=p.name
二、直接使用表联合查询
例如:select u.name,u.qq,p.* from users as u,posts as p where u.name=p.name
三、结合PHP语言实现
例:1、
<?php
$Sql="select *from posts";
$Result=@mysql_query($Sql);
while($rows=mysql_fetch_assoc($Result)){
$sql1="select name,qq from users where name='".$rows['name']."'";
$result1=@mysql_query($sql1);
$rows1=mysql_fetch_assoc($result1);
$OUTPUT[]=array(
'name'=>$rows['name'],
'qq'=>$rows1['qq'],
'post_id'=>$rows['post_id'],
'title'=>$rows['title'],
'contents'=>$rows['contents']
);
}
print_r($OUTPUT);//可以你需要的结果输出
?>
追问
如存在第三个表reply(回复表):id_reply(主键),content,id_post ,name
reply中有两个与其他两个表关联的字段id_post,name
这种情况要怎么关联?
是不是这样:
select u.name,u.qq,p.title r.content from users as u,posts as p,reply as r where u.name=p.name,r.id_reply=p.id_post?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select u.*,p.* from user as u,posts as p where u.name=p.name
关联两张表查结果
关联两张表查结果
追问
如存在第三个表reply(回复表):id_reply(主键),content,id_post ,name
reply中有两个与其他两个表关联的字段id_post,name
这种情况要怎么关联?
是不是这样:
select u.name,u.qq,p.title r.content from users as u,posts as p,reply as r where u.name=p.name and r.id_reply=p.id_post
追答
使用and 或or 去关联查询,也可以使用inner join(左连接(LEFT join)或右连接(right join))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select u.qq,u.name,p.* from posts as p left join users as u on p.name=u.name
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询