2015-02-08 96 views
1

我在解決如何正確連接內部連接以及在一個MySQL查詢中針對多個條件的其他表正確處理問題。帶有內部連接和多個條件的MySQL查詢

基本上,我正在爲我的網站創建一個小的追隨者訂閱源,它會從您關注的任何用戶輸出新帖子。

帖子表:

id | user_id | message | timestamp 

跟蹤表:

id | follower_id | following_id 

我查詢到現在:

SELECT posts.* 
FROM posts 
INNER JOIN follows 
ON posts.user_id = follows.following_id 
WHERE follows.follower_id = 1 
ORDER BY id DESC limit 10 

我怎麼會在裏面添加一個條件: 1。 )大於或小於一個ID(posts.id) 2.)指定它可以等o由用戶ID 1(我自己的帖子)發佈

當然,1將被替換爲一個變量,因此它對當前用戶會話是動態的。

這裏的任何建議,讓它很困惑。

+0

至於2)你可以添加你的連接條件想要的任何條件( 'ON ...') - 你可以在那裏放一個'OR'。 1)也是如此。你只需要從'PHP'級別向查詢添加一個參數。 – lared 2015-02-08 23:04:20

回答

1

要添加條件「1.)大於或小於ID(posts.id)」,您可以使用AND運算符將條件添加到WHERE子句末尾的查詢中。條件本身(使用大於一個例子):

posts.id > $n 

其中$ n是某個整數。

要添加條件「2.)指定它也可以通過用戶ID 1(我自己的帖子)發佈」,您可以使用OR運算符。您提供的條件說明中的關鍵字是「也」,這就是我們使用OR運算符而不是AND運算符的原因。條件本身是:

posts.user_id = $my_user_id 

其中$ my_user_id是進行查詢或查看訂閱源的用戶的user_id。

假設您想同時滿足條件2條件1 以及預先存在的條件「following.follower_id = 1」,您希望使用圓括號對條件進行分組。它可以幫助你寫出你的條件以及你想如何用簡單的語言分組。例如:

顯示由我或由我關注的人員發出的所有帖子,以及其ID也大於/小於給定數字的所有帖子。

這些條件可以在SQL表示有:

WHERE (follows.follower_id = $my_user_id 
OR posts.user_id = $my_user_id) 
AND posts.id > $n 

完成的查詢是:

SELECT posts.* 
FROM posts 
INNER JOIN follows 
ON posts.user_id = follows.following_id 
WHERE (follows.follower_id = $my_user_id 
OR posts.user_id = $my_user_id) 
AND posts.id > $n 
ORDER BY id DESC 
LIMIT 10; 
+0

非常感謝您的明確示例,正是我需要的!對於如何單獨處理這些條件感到困惑,但現在有道理。 – Danny 2015-02-09 10:09:15

+0

沒問題!我在答案中多加了一點,以解釋爲什麼你會選擇那些運營商和那個分組。我試圖添加足夠多的細節以便不會令人難以置信,但如果這個答案的一部分令人困惑,我會試着澄清它。 – Ryan 2015-02-10 01:03:31

0

您可以添加OR條款的ON加入子句posts.user_id = 1,你也可以把一個ANDWHERE子句posts.id > ###需要。

+0

但是,將ON添加到ON連接子句將與WHERE衝突follow.follower_id = ..不是嗎?你能否提供一個例子,這是我感到困惑的地方。 – Danny 2015-02-08 23:13:34