我想使用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
设置{{1带有id。
但是当有多个评论时,新闻更新会重复,所以它就像:
新闻1
- 没有评论
新闻2
-1评论
评论:
汤姆斯评论
新闻3
-2评论
评论:
约翰斯评论
新闻3
-2评论
评论:
Allans评论
我想要:
新闻1
-0评论
新闻2
-1评论
评论:
汤姆斯评论
新闻3
-2评论
评论:
约翰斯评论
阿朗评论
如何显示每条新闻更新及其附带的所有评论?
我已经尝试了comments_id
- 但是我无法获取每条评论的ID,因此用户可以单独删除评论吗?
我也试过GROUP_CONCAT
,但后来才得到第一个评论?
我如何计算评论?我试过这个:
GROUP BY news_tbl.news_id
但后来我才得到第一个书面新闻?!我花了很多时间试图让它工作,但似乎无法弄清楚:(希望有人可以帮助我
这是我的疑问:
COUNT(comments_tbl.comments_id) AS count
这是我的PHP代码:
$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";
答案 0 :(得分:2)
因为您要将新闻加入评论,所以每行都会包含新闻和其中一条评论。
您可能会发现在一个查询中选择新闻更有效,并在第二个查询中获取注释,因为您要传输的数据多于您所需的数据。你需要测量它以确定它是否更快。
或者,您可以在循环中处理此问题,只需在检测到新ID时编写新闻一次(您的查询已按ID排序,因此您知道它们将按顺序处理)
$currentNewsId = 0;
foreach($result as $row)
{
$commentsidfk = $row['comments_id_fk'];
$newsidfk = $row['news_id_fk'];
if ($newsidfk != $currentNewsId) {
// write the news out
$currentNewsId = $newsidfk;
}
// ...