mysql - SQL - 连接表

标签 mysql sql database

以下查询用于获取特定博客文章的所有评论并且运行良好。我现在在我的博客中添加了一个成员信誉点系统,类似于 Stack Overflow 的信誉系统,并尝试修改此查询以从 members_reputation 表中获取信誉点,以显示在每个评论的用户名旁边。

我认为通过添加 SUM(rep.points) AS member_rep 并在信誉表上添加 LEFT JOIN 可以解决问题,但我得到了奇怪的结果,太奇怪了无法描述。实际上,一个有趣的行为是并不是所有的评论都被返回。如果我删除了我尝试的解决方案,所有评论都会被返回,但我需要计算/显示他们的声誉。

每条评论都有一个成员,每个成员都有声誉。

SELECT comment.comment_id, comment.member_id, comment.comment,
comment.posted, member.screen_name, member.country_code, SUM(rep.points) AS member_rep
FROM blog_comments AS comment
LEFT JOIN members AS member ON comment.member_id = member.member_id

// my attempt start //
LEFT JOIN members_reputation AS rep ON comment.member_id = rep.member_id
// my attempt end //

WHERE comment.article_id = "&article_id&"
ORDER BY comment.comment_id DESC

数据库结构

comments              :    comment_id, member_id, comment, posted
members               :    member_id, screen_name, country_code
members_reputation    :    member_id, activity_type, points

我想看到的

This is a posted comment on my blog. Cool huh?
25/02/2012 By Martin G **850** (GBR)

如果有人能帮助我回到正确的道路上,我将不胜感激......

最佳答案

这是我注意到的几件事。

首先,您的 where 子句要求 comment.article_id,您没有将其包含在帖子底部的表结构中。我将假设您刚刚遗漏了它,但我想我还是会指出来。

如果两个表中的列名相同,您还可以通过指定 USING 而不是 ON 来简化联接。

要考虑的另一件事是表之间的关系类型。如果它是一对一的关系,那么连接就很简单。如果它是一对多或多对多,则连接会变得更加复杂,您必须正确地将它们组合在一起。我将假设每个评论只有一个成员,并且每个成员可能有多个代表。

最后,您有一个与表别名(注释)共享名称的列。如果您的 sql 语法允许的话,这可能会导致问题。

这就是我自己使用的:

SELECT c.comment_id, c.member_id, c.comment, c.posted, m.screen_name, m.country_code
       SUM(r.points) `member_rep`
FROM blog_comments `c`
LEFT JOIN members `m` USING (member_id)
LEFT JOIN members_reputation `r` USING (member_id)
WHERE c.article_id = "&article_id&"
ORDER BY c.comment_id DESC

另外:“&article_id&”代表什么?

关于mysql - SQL - 连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9477366/

相关文章:

php - 商业智能时间机器 (PHP/MySQL)

php - mySQL 查询似乎使服务器崩溃

php - 将 obj std 转换为模型 laravel DB::query

database - 在其他 RDBMS 上是否有任何等效于 Postgresql 的每个聚合函数?

mysql - 转换查询 : right joins to left joins

mysql - SQL SELECT FROM WHERE 名字 > "Maria"

mysql - 用于存储用户配置文件的更好数据模型是什么?

php - 如何使用 jQuery 每 1 秒从数据库获取实时数据

php - 对 contentsFromUrl 的快速奇怪 react

mysql - 如果任何列具有 NULL 值,则删除 MySQL 中的行?