2016-03-09 60 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'。這將阻止添加將帖子分享給自己創建者的行。 –

相關問題