我知道这个问题被多次询问(但是,我仍然找不到解决方案):
基本问题:拥有表格帖子,评论,用户……您可以使用一个选择语句选择并显示所有帖子和所有评论(使用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