mysql - 使用两个表计算每个用户的点赞数

标签 mysql

我有两个表,第一个是 POSTS,它具有三个字段(post_iduser_idtext) >) 第二个表是 LIKES 有两个字段 (user_id, post_id) likes.user_id 是喜欢该帖子的用户。

现在我想查询数据库并获取每个用户与另一个用户的点赞数(距离)。这意味着我会得到三个字段的结果,其中四个带有索引(我现在不太担心):

User 1 | User 2 | count(INT) | index
-------------------------------------
User_a | User_b |     45     | ab
User_c | User_n |     53     | cn
User_b | User_a |     38     | ba

我尝试使用类似的东西,但我并不总能获得准确的点赞数。另外,我还获得了一些数据冗余。

SELECT likes.user_id, posts.user_id,
COUNT(likes.post_id)
from posts, likes
WHERE posts.post_id = likes.post_id
GROUP BY posts.user_id
ORDER BY COUNT(likes.post_id)

我是MySQL菜鸟,所以请原谅任何错误!,感谢您的帮助!

最佳答案

SELECT likes.user_id, posts.user_id,
COUNT(DISTINCT likes.post_id) --<<changed
from posts
INNER JOIN likes ON posts.post_id = likes.post_id --<<changed
GROUP BY likes.user_id, posts.user_id --<<changed
ORDER BY COUNT(DISTINCT likes.post_id) --<<changed

我怀疑“数据冗余”可能来自您的 group by 子句。虽然 MySQL 确实允许您在此子句中编写不符合 SQL 标准的查询,但始终指定所有非聚合列非常重要。 (有关 MySQL 允许但不应使用的非标准语法的详细信息,请参阅 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html。)

另一项更改是在计数函数中使用 DISTINCT。如果无法访问您的表格,我不知道是否需要这样做,但它可以解决您所说的准确性问题。

最后。请停止使用逗号分隔的表列表作为 from 子句。这不再是一个好的做法,您应该遵循 ANSI 风格的连接语法,它更具体且更易于维护。

关于mysql - 使用两个表计算每个用户的点赞数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38287909/

相关文章:

java - 使用 java netbeans 将值插入数据库

mysql - 如何在日期时间数据类型中插入正确的格式?

php - 如何在 CodeIgniter 中使用查询生成器从两个表中选择数据?

mysql - 找出最新和第二个最新术语之间的区别

mysql - 我的函数计算两个纬度和经度之间的距离是否正确?

mysql - 如何检测 MYSQL 中的查询是否触发了 ON UPDATE 事件?

mysql - CakePhp,获取 Containable 中的总行数

PHP PDO 获取多维数组,第一列作为键,第二列和第三列作为键值对

php - 了解 PHP 和 MySQL 安全性基础知识

php - Phalcon:多态关联