0

我一直在社交网络上工作以加深我对 PHP 的了解,但是我已经到了我将根据用户是“朋友”的人从他的数据库中提取帖子的地步。

我给朋友的数据库结构如下:

USER_A | USER_B | CREATED_AT | IS_BLOCKED

然后是帖子:

USER | UPDATE | STATUS

因此,如果登录的用户是发布它的用户的朋友,我想显示从我的帖子表中选择的帖子。

所以,基本上,想知道是否有人有任何建议。它不会再复杂了,对结交朋友的朋友或类似的东西不感兴趣。所以,只是想知道是否有人可以用这个为我指明正确的方向。

我读到它需要 JOIN 等,但是我从来没有真正进入过 SQL 的那一边,因此不知道我会用它做什么,所以如果需要的话,将不胜感激相关问题和文章的链接.

谢谢

(我本质上是在寻找 SQL 语句的帮助,而不是 PHP 的帮助。)

更新#1:

我已经让新闻源工作了,现在我需要能够加入一个声明来显示用户名。我目前的状态是:http ://sqlfiddle.com/#!2/b07793/1/0

在任何人疯狂以明文形式存储密码之前,这不是一个公共系统,它纯粹是由我来测试的,对于一个只有我使用假密码的非公共脚本的哈希密码几乎不是安全风险,它只是让调试变得痛苦。

4

3 回答 3

1

像这样的东西应该工作:

SELECT * FROM posts 
JOIN friends ON posts.user = friends.user_b
WHERE user_a = 'someuser'

在这个语句中,我们正在加入表:posts和friends,根据两列的值,我们将post表的user列与friends表的user_b列建立关系,这样我们将得到一个结果仅设置两个表的值,其中两个相关列相等...

于 2013-04-21T19:22:34.250 回答
0

如果我正确理解了您描述的数据库模式,这将为您带来所有由与登录用户成为朋友的用户撰写的帖子。

 SELECT * FROM posts WHERE posts.user IN (SELECT user_b FROM friendships WHERE user_a=$logged_in_user)

查询非常简单。您从表posts中获取该帖子的创建者在您的friendships表中有一行作为 user_b 而 user_a 设置为登录用户的表中的所有行。

于 2013-04-21T19:20:24.413 回答
0

我假设了一些事情,如果它们不正确,您将不得不修改这些东西,但如果我是对的,这些操作将不需要任何JOINs:

  1. $userSession变量包含登录的用户 ID。
  2. $userToView变量包含他试图查看的用户 ID。
  3. 您的数据库结构中只有两个用户是朋友的条目,因此我们必须检查这两种组合。

判断用户是否为好友:

SELECT user_a, user_b FROM friends
WHERE (user_a = $userSession AND user_b = $userToView)
OR (user_a = $userToView AND user_b = $userSession)
LIMIT 1;

然后你会if在 PHP 中使用一条语句(通常最好将业务逻辑保留在应用程序中,而不是在数据库中),如果它是真的返回帖子。

$results = $mysqli->query($query)->fetch_row();
if($results) {
    ... return posts ...
} else {
    echo 'Not friends';
}

那将是一个类似这样的查询:

SELECT * FROM posts
WHERE user = $userToView;

您将需要阅读有关mysqli(不要使用 mysql 插件,它已被弃用)以及有关SQL 注入攻击以及如何防止它们的信息。这听起来可能很麻烦,但理解这些东西远没有如果你不去处理后果那么令人生畏。

于 2013-04-21T19:24:18.653 回答