我想创建一个新闻更新系统,使用 MySQL 和 PHP。但我不能让它工作,所以我可以显示新闻更新和所有附加的评论(然后一个有效的用户登录,这个人可以单独删除每条评论)。
我有这四个表和数据库架构
news_tbl (news_id, date, user (fk to users_tbl.username), headline, bodytext and picture)
users_tbl (username, email, password, usertype)
comments_tbl (comments_id, name, comment)
news_comments_tbl (news_comments_id, news_id_fk, comments_id_dk)
当用户写一条新闻更新时,news_comments_tbl
它的设置news_id
和comments_id
为NULL,然后用户写一条评论,news_comments_tbl
设置comments_id
一个id。
但是当评论超过一条时,新闻更新就会重复,所以它就像:
新闻 1
- 无评论
新闻 2
-1 评论
评论:
汤姆斯评论
新闻 3
-2 评论
评论:
约翰斯评论
新闻 3
-2 评论
评论:
艾伦评论
而且我要:
新闻 1
-0 评论
新闻 2
-1 评论
评论:
汤姆斯评论
新闻 3
-2 评论
评论:
Johns 评论
Allans 评论
我如何显示每个新闻更新和所有附加的评论?
我已经尝试过GROUP_CONCAT
- 但是我无法获取每条评论的 ID,所以用户可以单独删除评论吗?
我也试过了GROUP BY news_tbl.news_id
,但我只得到第一条评论?
我如何计算评论?我试过这个:
COUNT(comments_tbl.comments_id) AS count
但是我只得到第一个书面消息?!我花了很多时间试图让它工作,但似乎无法弄清楚:(希望有人能帮助我
这是我的查询:
$sqlquery ="SELECT news_tbl.*, news_comments_tbl.*, users_tbl.*, comments_tbl.*
FROM news_tbl
LEFT JOIN news_comments_tbl ON news_comments_tbl.news_id_fk = news_tbl.news_id
LEFT JOIN comments_tbl ON news_comments_tbl.comments_id_fk = comments_tbl.comments_id
LEFT JOIN users_tbl ON users_tbl.username = news_tbl.user
ORDER BY news_tbl.news_id DESC LIMIT 5";
这是我的 PHP 代码:
$result = $conn->query($sqlquery);
foreach($result as $row)
{
$commentsidfk = $row['comments_id_fk'];
$newsidfk = $row['news_id_fk'];
if($row['comments_id_fk'] == NULL)
{
echo $row['headline'];
echo '<br>';
echo $row['bodytext'];
echo '<br>';
}
if($row['comments_id_fk'] != NULL)
{
echo $row['headline'];
echo '<br>';
echo $row['bodytext'];
echo '<br>';
echo $row['comment'];
echo '<br>';
echo '<a href=delete.php?news_id='.$commentsidfk.' >Delete comment</a>';
echo '<br>';
}
echo '<br>';
echo '<a href=delete.php?news_id='.$newsidfk.' >Delete news</a>';
echo '<br>';
}