我一直在使用社交网络来提高我对PHP的了解,但是我已经到了我将从数据库中提取帖子的程度,具体取决于用户是谁“朋友”。
我的朋友的数据库结构如下:
USER_A | USER_B | CREATED_AT | IS_BLOCKED
然后发帖:
USER | UPDATE | STATUS
所以,如果登录的用户是发布它的用户的朋友,我想显示从我的帖子表中选择的帖子。
所以,基本上,想知道是否有人有任何建议。它不会比那更复杂,不想成为朋友的朋友或类似的东西。所以,只是想知道是否有人能指出我正确的方向。
我读过它会需要JOIN等等,但是我从来没有真正进入SQL的那一面,因此我不知道我会用它做什么,所以如果需要,链接到相关的问题和文章,如果需要,将不胜感激。
由于
(我基本上是在寻求SQL语句的帮助,而不是PHP。)
更新#1:
我有新闻源工作,现在我需要能够加入一个声明来显示用户名。我目前的状态是:http://sqlfiddle.com/#!2/b07793/1/0
在任何人为使用明文存储密码而疯狂之前,这不是一个公共系统,它纯粹是我测试和散列非公共脚本的密码,只有我用假的密码几乎不会带来安全风险,只会使调试成为一种痛苦。
答案 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:
$userSession
变量包含登录ID的用户。$userToView
变量包含他正在尝试查看ID的用户。确定用户是否为朋友:
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以及如何防止它们的信息。这可能听起来很麻烦,但是如果不这样做,理解这些东西要远远不如处理后果那么令人生畏。