关于php的帖子,mysql / php:显示帖子和每个帖子的所有评论

我知道这个问题被多次询问(但是,我仍然找不到解决方案):

基本问题:拥有表格帖子,评论,用户……您可以使用一个选择语句选择并显示所有帖子和所有评论(使用comment.user,comment.text,comment.timestamp)吗?这样的选择语句怎么样?如果没有,最简单的解决方案是什么?

我还尝试使用posts表加入评论表并使用GROUP BY,但我在每行或每个评论中只有一个评论,但多次也是这些帖子!?

我尝试了第一个链接的解决方案(嵌套的mysql_query然后获取)以及第二个链接(使用数组).然而,第一个引起了一堆错误(该帖子中的语法似乎不正确,我无法弄清楚如何解决它),在第二个我遇到了数组问题.

我的查询到目前为止看起来像这样:

SELECT p.id, p.title, p.text, u.username, c.country_name, (SELECT SUM(vote_type) FROM votes v WHERE v.post_id = p.id) AS sum_vote_type FROM posts p LEFT JOIN user u ON ( p.user_id = u.id ) LEFT JOIN countries c ON ( c.country_id = u.country_id ) ORDER BY $orderby DESC

我想知道这个问题是不是很常见,有帖子和评论显示……?

感谢您提前的每一个帮助!

解决方法:

不知道你的数据库结构,它应该看起来像这样.请注意,您应该将*字符替换为您实际需要的更明确的列列表.

SELECT p.*, c.*, u.* FROM posts p

LEFT JOIN comments c ON c.post_id = p.id

LEFT JOIN users u ON u.id = p.author_id

请注意,如果您只是想获得计数,总和等等,那么缓存一些信息是个好主意.例如,您可能希望在post表中缓存注释计数,而不是在每个查询中对它们进行计数.仅在添加/删除评论时计算和更新评论计数.

编辑:

意识到您还想将用户数据附加到每个评论.你可以不止一次地加入同一个表,但它变得很难看.这可能会变成一个非常昂贵的查询.我还提供了一个如何对列进行别名的示例,以免混淆:

SELECT p.*, c.*, u.name as post_author, u2.name as comment_author FROM posts p

LEFT JOIN comments c ON c.post_id = p.id

LEFT JOIN users u ON u.id = p.author_id

LEFT JOIN users u2 ON u2.id = c.author_id

标签:php,mysql,sql,select

来源: https://codeday.me/bug/20190609/1207764.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值