2012-01-05 58 views
2

更新新聞源頁下面是一個MySQL表:friends創建與人

followed INT, <-- The user's id (the follower is following him) 
followedby INT <-- The follower's id 

和表updates

updateid INT, 
updatetext TEXT, 
updatetime DATETIME 
uid INT 

與用戶ID 2一個傢伙正在登錄,並希望看到他遵循的用戶更新。 現在,他只跟隨3個用戶。我想選擇被隨後的loggedIn用戶誰,要選擇那些用戶更新用戶

SELECT * FROM updates WHERE (uid=10 , uid=20 OR uid=30) ORDERBY updatetime DESC LIMIT 10 

問題

:要選擇更新,我可以做到執行此。 用戶可以有很多朋友。請幫忙。

+0

你是哪種格式的字符串用戶信息(follow,followers) – Dau 2012-01-05 11:36:37

回答

3

您可以使用子查詢和IN()

SELECT * 
FROM updates 
WHERE uid IN(SELECT followed FROM friends WHERE followedby = USERS_ID_HERE) 
ORDER BY updatetime DESC LIMIT 10 
+0

只是你知道。此SQL查詢不正確。這是'朋友'和__not__'追隨者'你應該子查詢。 – Treffynnon 2012-01-06 08:53:07

+0

@Treffynnon:我想知道這個東西是如何工作的,而不是代碼。我能夠創建新聞提要頁面。 – 2012-01-06 12:32:40

+0

@特雷夫是的,我在那裏有「朋友」。我不確定爲什麼塞爾吉奧改變了這一點。 rollbacking – 2012-01-06 17:09:22

2

嘗試以下更新到您的SQL語句來實現sub-select in the where MySQL Docs條款:

SELECT * 
FROM updates 
WHERE uid IN (SELECT followed 
       FROM friends 
       WHERE followedby = '$current_user_id') 
ORDER BY updatetime DESC 
LIMIT 10 

$current_user_id是誰是當前登錄到該用戶的ID你的系統。

0

這是一個複雜的問題(「用戶可以有很多朋友」部分)。如果你的應用程序變得太大,數據庫將不適合單個服務器,你將不得不分片。那時你會遇到現有模式的問題。

一些大型網站通過爲每個用戶創建個人「物化」新聞源來解決此問題。

但是,我猜你現在不需要這個。查看其他答案。 :-)