【问题标题】:mysql liking you and others [closed]mysql喜欢你和其他人[关闭]
【发布时间】:2012-05-01 00:14:22
【问题描述】:

我想知道如何做到这一点

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

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

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

【问题讨论】:

  • 因为你 == $_SESSION['userid']...
  • 是的,但是当涉及到输出它时,如何以更简单、更快和易于理解的方式?
  • 如果您的查询要返回所有用户的详细信息,而不仅仅是计数,那么确定其中一个是否是当前用户应该是相对简单的。
  • 请给我一些例子
  • 不要让它变得更复杂;如果 all=20.000,那么 all-you 是 19.999。所以$all = 20.000; if($user->loggedIn() && $user->likesThisPage()) { $phrase = 'You and '. $all-1 .' other people'; } else { $phrase = $all .' people like this'; }

标签: php jquery mysql sql ajax


【解决方案1】:

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

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.

【讨论】:

  • 这太棒了!谢谢,我喜欢它,因为它的速度很快,而且只有一个查询。谢谢,让我看看
【解决方案2】:

首先,当您点击“赞”时,会在分配给帖子的数据库中输入一个条目。因此,假设该帖子的 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

【讨论】:

  • 我想到了第一个查询两个不同的东西。但我从来没有想过count-1这件事实际上很有趣。非常感谢,但是在两个查询中执行它会不会更慢?有什么先进的方法吗?
  • 我猜你可以在一个查询中完成它...我将编辑并编写一个简单的但我不会被测试。
  • 真的很好。多谢兄弟!但逻辑仍然存在,谢谢
  • 我添加了查询...与@jordeu lol 几乎相同
【解决方案3】:

查询其他人:

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";
}

【讨论】:

  • 那些查询需要注入净化,不要逐字使用它们
  • 是的,我知道。但逻辑似乎很容易理解,非常感谢
【解决方案4】:

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

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

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-13
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 2010-09-05
      • 2011-11-17
      相关资源
      最近更新 更多