php 留言板 留言和回复

两张表留言表messid,u_id//用户id,time,mess回复表replyid,u_id,time,mess,p_id//要回复留言的id怎样查询才能在页面显示所... 两张表
留言表 mess
id,u_id //用户id, time, mess
回复表 reply
id,u_id,time,mess,p_id //要回复留言的id

怎样查询 才能在页面 显示所有的留言和回复
大多网友说 回复表的p_id 和留言表的id 作联接查询
但这样 如果留言表中没有 回复 就查询不到,也就无法在页面显示
该如何解决
展开
 我来答
iostream210
2011-08-17 · TA获得超过912个赞
知道小有建树答主
回答量:588
采纳率:0%
帮助的人:380万
展开全部
看了你的问题.和数据库的2个表设计.
1.先确定数据表的设计.
留言表 message
字段:
msgid
uid
content
postdate

回复表replies
repliesid
uid
msgid
content
postdate

这样的设计表,我认为是最好的。符合数据库的范式,主要是简单明了,简单就意味着性能.

2.怎么把数据库合理的提取出来,只能说是从代码上着手.
第一种最直接的方法。
$sql = "select * FROM message order postdate desc";
得到$messages留言的数组
foreach ($message as $key => $value) {
$sql = "select * from replies where msgid = ".$value['msgid'];
得到留言对应的回复$replies
$message[$key]['replies'] = $replies;
}
最终得到数组$message;
前台显示:
foreach( $messsage as $key => $value ) {
echo $value[‘content']; //显示留言
foreach( $value['replies'] as $k => $val ) {
echo $val['content'];//显示该留言下的恢复
}
}

第二中方法,我比较喜欢,而且也一直在用
$sql = "select * FROM message order postdate desc";
得到$messages;
通过处理得到,数组$messages中的所有msgid,并存入一维数$msgids
$msgids = array();
$result = array(); //这个数组转化$messages用的.因为我们要把$messages的key值变成msgid
foreach( $message as $key => $value ) {
$msgids[] = $value['msgid'];
$result[$value['msgid']] = $value;
}
unset($messages); 这个数据就没有用了。因为已经有$result;

一次性查询出,这些留言需要的所有回复,$replies;
$sql = "select * from replies WHERE msgid in (".implode(',',$msgids).") order by postdate desc";
foreach( $replies as $key => $value ){
$result[$value['msgid']]['replies'][] = $value;
}

前台显示:
foreach( $resultas $key => $value ) {
echo $value[‘content']; //显示留言
foreach( $value['replies'] as $k => $val ) {
echo $val['content'];//显示该留言下的恢复
}
}
追问
方法二 好像很多人用  这样 一层层 循环 是不是 效率 低啊
追答
方法一是循环查询的。访问量和留言很多的,最好不要用。
方法二推荐你使用。一共2次select. 至于代码的循环,相对于数据库的操作,没有可比性,可以忽略不计。
蕹尘
2011-08-18 · TA获得超过166个赞
知道答主
回答量:31
采纳率:0%
帮助的人:40.3万
展开全部
我感觉有时候也完全可以把留言与回复放在一个表中,我不知你这个实现的具体功能所以不好说行不行,不过,楼上的两种方法是一般做法可以效仿,只是web服务器与sql服务器交互太过频繁可能会降低整个网站的响应能力,当你对关系数据库比较了解后,可以去找更优化的方法,如。引入存储程序等,哈哈。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a1997733333
2011-08-17 · 超过11用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:56万
展开全部
v
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式