mySQL数据库结构来表示一个用户接着另一个用户?
基本上,我正在尝试使用多个用户制作一个程序,其中每个用户发布自己的图片,同时允许用户跟随另一个用户并查看该用户的文章 我有以下数据库: 用户(用户id) 图片(标题) 发布人(用户id,\u标题) 及 追随者(用户id,追随者id) 现在,我正在尝试编写一个SQL来检索两个方面的内容:由登录用户发布的文章,以及由登录用户遵循的用户发布的文章 我编写的SQL是:mySQL数据库结构来表示一个用户接着另一个用户?,mysql,sql,database,Mysql,Sql,Database,基本上,我正在尝试使用多个用户制作一个程序,其中每个用户发布自己的图片,同时允许用户跟随另一个用户并查看该用户的文章 我有以下数据库: 用户(用户id) 图片(标题) 发布人(用户id,\u标题) 及 追随者(用户id,追随者id) 现在,我正在尝试编写一个SQL来检索两个方面的内容:由登录用户发布的文章,以及由登录用户遵循的用户发布的文章 我编写的SQL是: "SELECT * FROM pictures NATURAL JOIN users NATURAL JOIN posted_by NA
"SELECT * FROM pictures NATURAL JOIN users NATURAL JOIN posted_by NATURAL JOIN followers WHERE user-id = '" . $user-id . "' OR follower-id = '" . $user-id . "'";
现在,这个问题在于
WHERE user-id = '" . $user-id
这部分没有返回正确答案,因为followers表中的用户id实际上并不表示该用户的id,而是表示该用户跟随的人的用户id
问题是:如何重新构造followers表,以便follower用户id和followee用户id都由用户表中的不同用户表示,这样,我就可以在一次查询中获得所需的图片了?我认为设计此查询的最佳方法是使用名为
post
的表作为表picture
和article
的父表(picture和article具有要发布的外键)。将公共字段放在post表中(如用户id或日期),您可以使用它在一个非常简单的SQL中选择和排序所有您想要的帖子。考虑到您现有的结构
此查询将为您提供所需的输出
select pst.userid, pic.title
from pictures pic
inner join posted_by pst on pic.title = pst.title
left join followers flw on pst.userid = flw.userid
where pst.userid = <userid> or flw.followerid = <userid>
选择pst.userid,pic.title
来自图片
pst在pic.title=pst.title上发布的内部联接
pst.userid=flw.userid上的左加入追随者flw
其中pst.userid=或flw.followerid=
您可以选中“使用联合”:一个子查询返回用户发布的图片,另一个子查询返回其追随者发布的图片。