1 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
看了你的問(wèn)題.和數(shù)據(jù)庫(kù)的2個(gè)表設(shè)計(jì).
1.先確定數(shù)據(jù)表的設(shè)計(jì).
留言表 message
字段:
msgid
uid
content
postdate
回復(fù)表replies
repliesid
uid
msgid
content
postdate
這樣的設(shè)計(jì)表,我認(rèn)為是最好的。符合數(shù)據(jù)庫(kù)的范式,主要是簡(jiǎn)單明了,簡(jiǎn)單就意味著性能.
2.怎么把數(shù)據(jù)庫(kù)合理的提取出來(lái),只能說(shuō)是從代碼上著手.
第一種最直接的方法。
$sql = "select * FROM message order postdate desc";
得到$messages留言的數(shù)組
foreach ($message as $key => $value) {
$sql = "select * from replies where msgid = ".$value['msgid'];
得到留言對(duì)應(yīng)的回復(fù)$replies
$message[$key]['replies'] = $replies;
}
最終得到數(shù)組$message;
前臺(tái)顯示:
foreach( $messsage as $key => $value ) {
echo $value[‘content']; //顯示留言
foreach( $value['replies'] as $k => $val ) {
echo $val['content'];//顯示該留言下的恢復(fù)
}
}
第二中方法,我比較喜歡,而且也一直在用
$sql = "select * FROM message order postdate desc";
得到$messages;
通過(guò)處理得到,數(shù)組$messages中的所有msgid,并存入一維數(shù)$msgids
$msgids = array();
$result = array(); //這個(gè)數(shù)組轉(zhuǎn)化$messages用的.因?yàn)槲覀円?messages的key值變成msgid
foreach( $message as $key => $value ) {
$msgids[] = $value['msgid'];
$result[$value['msgid']] = $value;
}
unset($messages); 這個(gè)數(shù)據(jù)就沒(méi)有用了。因?yàn)橐呀?jīng)有$result;
一次性查詢出,這些留言需要的所有回復(fù),$replies;
$sql = "select * from replies WHERE msgid in (".implode(',',$msgids).") order by postdate desc";
foreach( $replies as $key => $value ){
$result[$value['msgid']]['replies'][] = $value;
}
前臺(tái)顯示:
foreach( $resultas $key => $value ) {
echo $value[‘content']; //顯示留言
foreach( $value['replies'] as $k => $val ) {
echo $val['content'];//顯示該留言下的恢復(fù)
}
}
- 1 回答
- 0 關(guān)注
- 1456 瀏覽
添加回答
舉報(bào)