2013-08-19 86 views
1

首先,我很抱歉問這樣的愚蠢問題。 我是新來的sql。從互聯網提供基本的東西,但不知道這一點。如何將邏輯放入SQL?

讓我想我有一個表名爲職位,我存儲人的職位。表結構是這樣的..

Post_id | poster_id | text 
1  | 12  | "hello this is a post" 
2  | 15  | "Another post" 
3  | 77  | "More counting" 

有一個表名爲「朋友」我在哪裏存儲誰的朋友是誰。表結構是這樣的..

user_one | user_two 
1   | 88 
84  | 33 
1   | 66 

現在我可以使用SQL這樣從後

SELECT * FROM POST INNER JOIN frnends ON user_one = poster_id WHERE 1 

獲得職位,但這樣會通過將兩個表一起找張桌子,廣東話我做一些邏輯喜歡這個?

SELECT職位從帖子裏poster_id =(SELECT user_two,user_one朋友WHERE user_one =添加my_id OR user_two =添加my_id

也許添加my_id是一個變量,其中添加my_id = 1

現在做?這種邏輯

任何幫助將是如此之大

+1

你應該指定你想要完成的。你想看看你的所有帖子,所有你的朋友的帖子,或只是你的朋友的帖子?另外,在朋友中,如果我是你的朋友,你是否會自動成爲我的朋友?或者我總是選擇我的朋友? –

+0

我們都是朋友。我想讓我的朋友發帖以及我的 – ddiipp

回答

1

對不起,我缺乏評論的聲望。應該改進Gamal的解決方案以防止My_id的帖子返回;

SELECT * 
FROM post p 
INNER JOIN friends AS f on p.poster_id IN (f.user_one, f.user_two) 
WHERE My_id IN (f.user_one, f.user_two) 
AND p.poster<>My_id; 

或者如果你確實需要這些帖子,

SELECT * 
FROM post p 
INNER JOIN friends AS f on p.poster_id IN (f.user_one, f.user_two) 
WHERE My_id IN (f.user_one, f.user_two) 
AND p.poster<>My_id 
UNION 
SELECT *, My_id AS user_one, NULL AS user_two 
FROM post p 
WHERE p.poster=My_id; 

問題是,對於My_id所屬的每個關係,Gamals建議都會通過My_id返回每個帖子一次。

0

試試這個:

SELECT * 
    FROM [sample].[dbo].[posts] a inner join [sample].[dbo].[friends1] b on a.posterId=b.user_one or a.posterId=b.user_two where a.PosterId=12 
+1

我認爲這是SQL的錯誤方言。它不適用於MySQL,不是標準。 – Michas