用于帖子的社交网络SQL语句

时间:2013-04-21 19:12:26

标签: mysql sql

我一直在使用社交网络来提高我对PHP的了解,但是我已经到了我将从数据库中提取帖子的程度,具体取决于用户是谁“朋友”。

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

USER_A | USER_B | CREATED_AT | IS_BLOCKED

然后发帖:

USER | UPDATE | STATUS

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

所以,基本上,想知道是否有人有任何建议。它不会比那更复杂,不想成为朋友的朋友或类似的东西。所以,只是想知道是否有人能指出我正确的方向。

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

由于

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

更新#1:

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

在任何人为使用明文存储密码而疯狂之前,这不是一个公共系统,它纯粹是我测试和散列非公共脚本的密码,只有我用假的密码几乎不会带来安全风险,只会使调试成为一种痛苦。

3 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

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

在这个语句中我们正在加入表:帖子和朋友,基于两列的值,我们将post表的列用户与friends表的user_b关系放在一起,这样我们就会获取只有两个表的值的结果集,其中两个列的关系相等...

答案 1 :(得分: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设置为登录用户的所有行。

答案 2 :(得分:0)

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

  1. $userSession变量包含登录ID的用户。
  2. $userToView变量包含他正在尝试查看ID的用户。
  3. 您的数据库结构只有两位朋友的条目,因此我们必须检查两种组合。
  4. 确定用户是否为朋友:

    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;
    

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

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

    这将是一个像这样的查询:

    SELECT * FROM posts
    WHERE user = $userToView;
    

    您需要阅读有关mysqli(不要使用mysql插件,已弃用)和约SQL injection attacks以及如何防止它们的信息。这可能听起来很麻烦,但是如果不这样做,理解这些东西要远远不如处理后果那么令人生畏。