为了账号安全,请及时绑定邮箱和手机立即绑定

php 留言板 留言和回复

php 留言板 留言和回复

PHP
UYOU 2018-06-24 00:00:36
两张表留言表 mess id,u_id //用户id, time, mess回复表 reply id,u_id,time,mess,p_id //要回复留言的id怎样查询 才能在页面 显示所有的留言和回复 
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

看了你的问题.和数据库的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'];//显示该留言下的恢复
}
}

查看完整回答
反对 回复 2018-07-29
  • 1 回答
  • 0 关注
  • 1408 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信