2011-12-21 105 views
1

这一直困扰着我一段时间。显示“订阅者”的帖子和用户自己的帖子

我的问题: 我有2个不同的表..用户帖子和用户表的表。

订户表看起来像这样:

SubscriberID - >简档
1 - > 2
1 - > 3
2 - > 3
2 - > 4
3 - > 2

我的帖子表如下所示:

PostID - > AuthorID - > PostDate - > PostBody
1 - > 2 - > 12/20/12 - > Hello Word
2 - > 3 - > 12/21/12 - > Bye Bye World
3 - > 1 - > 12/22/12 - >哦等待
4 - > 4 - > 12/23/12 - >有人还在吗?

基本上,它是如何工作的,就是具有ID的用户订阅了ID为2和3的用户.ID#2被订阅了ID#3和#4。如果用户订阅某个用户,他们只能看到他们订阅的人的帖子。现在,我使用下面我在一个类似的问题看到:

SELECT POSTS.* 
FROM POSTS 
JOIN SUBSCRIBERS 
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID 
WHERE SUBSCRIBERS.SUBSCRIBERID = ? 
ORDER BY POSTS.POSTID DESC LIMIT 10 

这工作得很好,但它不会显示用户的职位也是如此。我试过修改它,但它不工作:\

如果你想知道,“?”代表用户的ID

所以,如果可以的话,这将是巨大的,如果有人能告诉我如何将用户自己的帖子一起与来自用户订阅的人的职位,以

+0

最简单的方法是允许用户订阅自己(根据显示订阅帖子的模型,这是有意义的)。 – djlumley 2011-12-21 02:01:02

+0

这样做可能会成为我的最后手段,如果没有别的工作 – InVert 2011-12-21 03:25:51

+0

我可以看到的替代方法是使用子查询或多个查询。查找用户订阅的profileID列表,然后提取profileID位于结果列表中的帖子列表,或者是当前profileID。 – djlumley 2011-12-21 04:07:31

回答

2

你可以做到这一点修改你的查询到:

SELECT POSTS.* 
FROM POSTS 
LEFT JOIN SUBSCRIBERS 
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID 
WHERE SUBSCRIBERS.SUBSCRIBERID = ? OR POSTS.AUTHORID = ? 
GROUP BY POSTS.POSTID ORDER BY POSTS.POSTID DESC LIMIT 10 

它也选择用户自己的帖子。希望这会有所帮助。

更新:增加GROUP BY POSTS.POSTID所以重复被删除,因为你只在POSTS表中查找数据。

当你像传递值运行查询 - 例如。对于有用户ID为1的查询看起来像:

SELECT POSTS.* 
FROM POSTS 
LEFT JOIN SUBSCRIBERS 
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID 
WHERE SUBSCRIBERS.SUBSCRIBERID = 1 OR POSTS.AUTHORID = 1 GROUP BY POSTS.POSTID 
ORDER BY POSTS.POSTID DESC LIMIT 10 

结果是:

PostID AuthorID PostDate PostBody 

3  1 2012-12-21 Oh Wait 
2  3 2012-12-21 Bye Bye World 
1  2 2012-12-20 Hello Word 

这是你当值传递给选择查询正常。传递给SUBSCRIBERIDAUTHORID的值应该与相同。 LEFT JOIN将解决您的问题。

+0

奇怪的是,这也不起作用:\ – InVert 2011-12-21 03:25:19

+0

我不是SQL专家,但我想说这可能是因为您使用ProfileID加入AuthorID,因此无需测试我假设这意味着至少需要一个人订阅用户的AuthorID/ProfileID将被列入连接表中。 – djlumley 2011-12-21 04:06:11

+0

@ user984935 - 查询工作正常,我已用您在问题中发布的数据对其进行了测试。您必须将相同的ID传递给'SUBSCRIBERID'和'AUTHORID',就像我在答案后面的更新查询中一样。 – 2011-12-21 05:00:21

相关问题