0

我想知道如何做到这一点

在此处输入图像描述

我的意思是“你和其他 19,389 人” 你如何从其他人中识别出。如果用户登录并喜欢某个状态或喜欢某个状态或类似 facebook 的东西。我想抓住“你”的部分。但我似乎不明白它背后的逻辑。

我正在使用 php 和 jquery。你如何在sql中解决这个问题?还是真的是sql?您如何从其他人中定义用户?

如果我做错了或问错了,请告诉我正确的方法和答案,我非常需要你的帮助。

4

5 回答 5

5

只需一个查询,您就可以这样做:

SELECT COUNT(user_id) AS everybody, SUM(user_id = "your_user_id") AS you FROM fb_likes WHERE post_id = 4;

然后如果you大于零打印(实际上它必须是 0 或 1):

You and [everybody - you] others like this.

别的

[everybody] like this.
于 2012-04-19T13:19:47.923 回答
4

首先,当您单击“喜欢”时,在分配给该帖子的数据库中会出现一个条目。因此,假设该帖子的 ID 为 1234567890,因此您将在数据库表中看到类似的内容:

PostID      UserID
1234567890  54543534
1234567890  75231415
1234567890  78653421
1234567890  99653221

// Query example
SELECT COUNT(*) FROM LikeTable WHERE PostID = 1234567890
// Return 4

首先你算一下,这里有 4 个。

之后,检查当前登录用户的 UserID 是否在数据库中。

  • 是的。他喜欢过。
  • 不,他不喜欢。

假设我们是用户 54543534。在数据库中,所以我喜欢这篇文章。

// Query example
SELECT PostID FROM LikeTable WHERE PostID = 1234567890 AND UserID = 54543534 LIMIT 1
// Return 1

假设我们是用户 8748977777。不在数据库中,所以我不喜欢这篇文章。

// Query example
SELECT PostID FROM LikeTable WHERE PostID = 1234567890 AND UserID = 8748977777 LIMIT 1
// Return 0

所以我说 IF/ELSE 语句是:

IF I liked 
    You and COUNT - 1 others like this.
ELSE
    COUNT like this. Click to like.

编辑 :

我认为这样的事情会让这份工作:

SELECT COUNT(PostID) AS All, SUM(UserID = X) AS Liked FROM LikedTable WHERE PostID = X
于 2012-04-19T13:13:41.873 回答
2

查询他人:

SELECT COUNT(userid) FROM likeTable WHERE postid = $postid

为您查询:

SELECT COUNT(userid) FROM likeTable WHERE postid = $postid AND userid = $_SESSION['userid']

然后做:

if ($youCount == 1) {
    echo "Liked by you and " . $othersCount - 1 . " others";
}
else {
    echo "Liked by $othersCount people";
}
于 2012-04-19T13:15:19.407 回答
1

我对最佳数据库模式了解不多,但我认为这是 Facebook 术语中的每个点赞都是 FB 社交对象图上的一个节点。这可能意味着每个点赞都是某个表上的单个数据库记录。要计算喜欢的数量,您只需COUNT对与帖子相关的喜欢记录进行操作。

现在如果是这样的话,那么在谁执行它的类似记录中包含一些识别信息是微不足道的。从头到尾,这将是用户 PK 上的 FK。

因此,如果您在 Facebook 上登录,它就会知道您是谁以及您关联的用户 ID 是什么。对于它聚合喜欢的每个帖子,它可以将您的用户 ID 与喜欢的用户 ID FK 进行反核,并确定您实际喜欢哪些帖子。因此,它可以有条件地显示You and 14,000 others like this14,001 like this

于 2012-04-19T13:14:31.780 回答
0

努力理解这个问题,但我认为你可能一次尝试做太多事情。

要么运行两个查询,一个来检查“你”(你的会话 ID 等)是否在记录这个的表中,或者拉出全部并使用 in_array 或类似的东西来查看“你”是否在列表中。

于 2012-04-19T13:15:07.637 回答