2015-12-02 78 views
0

我一直在爲此工作了幾個小時,現在越來越累。我想像Twitter那樣從我關注的人和我自己那裏獲得用戶發佈的帖子。Mysql - 如何從你關注的用戶獲取新聞源

因此,有一個表users_posts,其中所有用戶的帖子都列user_id來確定誰發了帖子。

另一個表users_followers包含所有追隨者即。 user_id如下following_id

因此,這裏是我的查詢:

用戶ID = 2271個

SELECT users_followers.following_id AS following_id, users_posts.id 
FROM users_followers, users_posts 
WHERE users_posts.user_id = users_followers.following_id 
AND (users_followers.user_id =2271) 

這個查詢工作,但問題是,它有點慢。有沒有更快的方法來做到這一點?

另外,正如你所看到的,我只能從我關注的人那裏得到帖子,而不是我自己。

任何幫助?

+1

查詢看起來不錯;不需要括號。也許搜索查詢優化和索引 –

回答

0

如果我正確理解你的表格,我會用明確的JOIN來做到這一點。我不確定這會加速多少,而不是你正在使用的隱含的JOIN

SELECT following_id, p.id 
FROM users_followers f 
LEFT JOIN users_posts p 
    ON (p.user_id = f.following_id) 
WHERE f.user_id = 2271 

很可能,向表中添加一個或兩個索引將有所幫助。

使用MySQL EXPLAIN命令(只是把它放在你的SELECT查詢前面)將顯示被用於查詢索引,臨時表和其他資源。當一個查詢比另一個查詢更快或更有效時,它應該給你一個想法。

+0

感謝您的回覆。這兩個查詢需要相同的時間,但我錯過了索引... – Overcomer

0

如果您正確編制了表格的索引,您的查詢就像書面表達一樣正常。至少你需要一個關於users_posts.user_id和users_followers.following_id的索引。

查詢也可能被大量記錄放慢,即使它已完全索引。在這種情況下,我發現phpmyadmin是一個非常寶貴的工具。從服務器頁面(可能是本地主機)選擇狀態標籤,查看有關您的MySQL服務器如何執行的豐富信息以及如何改進它的建議。

+0

謝謝。我錯過了索引... – Overcomer