在诸如stachexchange项目之类的Question / Answer / Comment的数据库结构中,数据库模式可以是与FK
s连接的三列。这似乎是理想的,但我想知道检索问题数据的最有效查询是什么。 Answers将被简单地检索并由question_id的WHERE子句列出。
我的问题是如何列出嵌套在相应答案下的评论?我正在处理PHP while循环以列出答案和注释的子列表。
我心目中的一个非常基本的结构。我的问题的目的是找到想法数据库结构;因此,这只是一个建议。
CREATE TABLE questions (
question_id int(11) NOT NULL AUTO_INCREMENT,
title varchar(255),
content text,
PRIMARY KEY (question_id);
CREATE TABLE answers (
answer_id int(11) NOT NULL AUTO_INCREMENT,
question_id int(11) REFERENCES questions(question_id),
content text,
PRIMARY KEY (answer_id);
CREATE TABLE comments (
coment_id int(11) NOT NULL AUTO_INCREMENT,
question_id int(11) REFERENCES questions(question_id),
answer_id int(11) REFERENCES answers(answer_id),
content text,
PRIMARY KEY (coment_id);
答案 0 :(得分:2)
假设表结构如下(简化)
Questions Table QID | Question Answers Table AID | fQID | Answer Comments Table CID | fAID | comment
fQID =外键问题表
fAID =答案表的外键
以下查询将选择特定问题的所有评论
select comment from question join answers on QUI=fQUID join comments on AID=fAID where QID='$questionID'
以下查询将选择符合答案ID的评论
select aid, answer, comment from question join answers on QUI=fQUID join comments on AID=fAID where AID='$answerID'
编辑:
对于在答案下嵌套注释,请使用类似的东西(你需要修改它,这非常粗糙)
$sql = 'select comment, cid, aid, answer from question join answers on QUI=fQUID left join comments on AID=fAID where QID='$questionID' order by AID';
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
echo "<div>" . $row['answer'];
$current = $row['aid'];
do{
if($current != $row['aid']){
print "</div>\n<div>" . $row['answer'];
$current = $row['id'];
}
$current = $row['aid'];
if($row['cid'] != null){
print "<div>" . $row['comment'] . "</div>";
}
}while($row = mysql_fetch_array($result));
print "</div>";
答案 1 :(得分:1)
这是最简单的方法和最高效的
CREATE TABLE posts (
post_id int(11) NOT NULL AUTO_INCREMENT,
parent_id int(11) REFERENCES posts(post_id),
title varchar(255),
content text,
PRIMARY KEY (post_id);
CREATE TABLE comments (
coment_id int(11) NOT NULL AUTO_INCREMENT,
post_id int(11) REFERENCES posts(post_id),
content text,
PRIMARY KEY (coment_id);
问题帖子将有一个NULL parent_id。这将是最简单,最灵活的设计。
以下是加载页面的示例查询。
select * from posts where post_id = 9 or parent_id = 9
我的问题是如何列出嵌套在其对应的注释 回答?我正在处理PHP while循环列出答案和 评论的子列表。
简单,当您循环播放帖子时 - 根据当前帖子ID
过滤评论现在,如果你想要这么简单,你可以将评论放在帖子表中
CREATE TABLE posts (
post_id int(11) NOT NULL AUTO_INCREMENT,
parent_id int(11) REFERENCES posts(post_id),
is_comment bit(1),
title varchar(255),
content text,
PRIMARY KEY (post_id);
注意: is_comment列
以下是查询页面的方法:
select * from posts where post_id = 9 or parent_id = 9 or parent_id IN (select post_id from posts where parent_id = 9)
抱歉,我不是一个mysql人