1 回答
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'];//显示该留言下的恢复
}
}
- 1 回答
- 0 关注
- 1408 浏览
添加回答
举报