2016-05-09 49 views
0

我想創建Twitter的一個系統,用戶可以連接到對方01​​那麼他們將能夠看到對方職位如何顯示我的職位以及職位的追隨者MySQL的

這裏是用戶表

+-----+------------+---------+ 
| id | name  |username | 
+-----+------------+---------+ 
| 1 | Phillip | user1 | 
| 2 | Another | user2 | 
+-----+------------+---------+ 

連接表

+---------+-----------+--------------+--------------+ 
|  id | follower | following |  status | 
+---------+-----------+--------------+--------------+    
|  1 | user1 | user2  |  0  | 
|  2 | user3 | user1  |  1  | 
+---------+-----------+--------------+--------------+ 

交表

+---------+-----------+--------------+--------------+ 
| post_id | content |  title | username | 
+---------+-----------+--------------+--------------+    
|  1 | hello guyz|  eg1  |  user1 | 
|  2 | example1 |  eg 2 |  user2 | 
+---------+-----------+--------------+--------------+ 

查詢我試圖

SELECT 
post.* 
FROM users 
LEFT JOIN connection ON (users.username = connection.follower 
OR users.username = connection.following) 
INNER JOIN messages ON (
    users.username = post.username 
    OR connection.following = post.username 
) 
WHERE users.username = 'user1' 
GROUP BY post.id 
LIMIT 0, 8 

出了什麼問題在此查詢,因爲這查詢也不完整

爲了讓你瞭解更好 - >

假設我的名字是例如&如果我發送請求到example2 &他接受我的請求,然後status will be set to 1那麼我怎麼能看到他的帖子在我的時間表&他怎麼能看到我的帖子在他的時間表

+0

更好的方式是讓所有的用戶發佈在一個陣列和追隨者張貼在另一個數組,後來根據時間戳加入他們的行列。 – Manikiran

+0

@Manikiran可能有一千個帖子和追隨者我不能讓每個人都進入數組這就是完全錯誤的想法 –

+1

沒有人一次獲得所有的數據,就像twitter一樣,你只會獲得一段時間後發佈的帖子,稍後當你滾動,你應該得到更舊的帖子,這不僅提高了用戶的加載時間,而且還節省了複雜的查詢。 – Manikiran

回答

0

爲你想要的結果的查詢是

SELECT * FROM `posts` 
WHERE `username` = 'user1' 
OR `username` IN (SELECT `follower` FROM `connection` WHERE `following`='user1' AND `status`=1)