2016-03-09 176 views
0

我有两个表发布和共享,发布有很多份额。我想使用userId(由所有者用户发布)获取发布表中的所有数据,并使用相同的userid来检查共享表,如果某个人向其他用户共享帖子,如果任何条件为真,我需要获取数据。查询从一个表中提取信息基于其他

我想获取发布表中的数据,如果发布的所有者或共享表中的其他用户共享。

实施例:

表名:交

id(pk) postname userid 
    1 abc  10 
    2 xxx  10 
    3 yyy  11 
    4 zzz  12 
    5 bbb  13 

表名:份额

id postid(fk) userid 
1 3   10 
2 4   10 
3 3   11 
4 1   12 

预期输出:例如通过用户ID查找10

id postname userid 
    1 abc  10 // this record created by user 10 (owner) 
    2 xxx  10 // this record created by user 10 (owner) 
    3 yyy  11 // this record shared by other user to user 10. 
    4 zzz  12 // this record shared by other user to user 10. 
+0

我建议做两个单独的查询和联合他们。 –

+0

@ PM77-1有没有其他的方式可以发布和分享? –

+0

我正试图让你的问题的正面或反面。你有表格“发布”,这是所有帖子的列表,以及创建它的用户。然后你有'分享'这是一个'共享'给其他用户的职位列表。我认为表共享中的postid相当于post(id)的主键?现在..你的结果是指示什么?我似乎无法弄清楚这一点。一半的结果似乎表明它是与创建它的原始用户一起的帖子名称,然后另一半似乎显示用户具有向他们分享的帖子。 –

回答

1

您可能想在两个不同的列中打印created_byshared_by,因为示例看起来有点令人困惑。以下查询应产生预期的输出在这种情况下:

select p.id, p.postname, p.userid as 'created_by', s.user_id as 'shared_by' 
from post p left outer join share s on p.id = s.postid 
where p.userid = 10 
order by p.id; 
+0

我正在使用mysql,我尝试了你的代码,但我得到了所有记录。我想获取所有者创建的所有帖子(例如:用户id = 10),并由其他用户共享到用户ID 10. –

+0

我编辑了我的答案。你现在可以检查吗? –

0

它最后点击你在找什么..

select p.id, p.postname, p.userid 
from post p 
join share s on s.postid=p.id 
where s.userid='10' or p.userid='10' 

应该返回与特定用户(ID 10)的所有交互,如果某个帖子是由该用户创建的,或者帖子是与该用户共享的。

+0

感谢您的回复。我尝试了userid 11,它返回重复的记录。 –

+0

是的,它会,因为有两个不同的行,用户ID为11.可能会添加'和s.userid <> p.userid'。这将阻止添加将帖子分享给自己创建者的行。 –

相关问题