2012-04-25 51 views
-1

好的,所以我想在我的網站上添加新聞提要。我有3個名爲Users,Follow和Posts的表。基本用戶數據進入用戶表,誰在追蹤存儲在關注表中的用戶以及用戶帖子進入帖子的內容。現在,我知道如何從數據庫表中選擇每篇文章,並使用WHERE子句限制它。但是,我如何編寫我的查詢來選擇僅來自用戶的所有帖子,並按照DESC日期顯示它們?謝謝。在SQL查詢中使用數組

+0

最好爲這類問題展示你的模式。另外,您嘗試過哪些查詢?你有沒有接近理想的結果? – 2012-04-25 18:26:32

+0

你嘗試過的一些事情可能會幫助你找到一個很好的答案 – 2012-04-25 18:26:58

回答

1

下面是你一個總體佈局,使三個表像你所說,我在下面列出只是作爲一個例子

[TABLES]

  • 用戶
  • 追隨者
  • 帖子

在用戶表中,你至少應該有如userid(自動遞增值/首要的關鍵)。

追隨者表應該有類似於userid的東西,它將與用戶表userid相匹配,後者列也將具有用戶表中追隨者的id#。

然後對於你的文章表,你會想擁有userid,所以當每個帖子被創建時,它將具有來自users表的id。

然後,你需要做的是這樣的:你如何獲得用戶ID摸不着頭腦

SELECT p.* 
FROM posts AS p 
WHERE p.userid IN (SELECT followid FROM followers WHERE userid = ###) 
ORDER BY p.date DESC 

現在,它真的取決於。如果您在登錄後通過會話傳遞用戶標識(類似於Facebook),則可以將userid = ###更改爲類似於userid =「。$ _ SESSION ['userid']」的內容。但是,這又取決於你如何傳遞用戶ID,但上面的內容至少應該讓你開始。

確保將索引放在用戶標識和followid列上,這樣當表格變大時,它會快速完成連接。

0

到@巴蒂爾的回答另一種方法是使用JOIN運算符:

'SELECT p.* // I prefer to name all the fields, but for brevity's sake I'll use the shorthand 
FROM Posts AS p 
INNER JOIN Follow AS f ON p.userid = f.followid 
WHERE f.userid = '.$selectedUserID.' 
ORDER BY p.date DESC;' 

對於inputed用戶ID($ selectedUserID),它會發現所有的用戶ID,他們遵循的人的(後續ID匹配在Follow x-ref表上的用戶ID),然後按日期從降序排列查找帖子表中的各自帖子。如果他們沒有關注任何人或者他們關注的人沒有帖子,它將返回空。

我也希望我不需要提醒您清理輸入到數據庫並將輸出轉義到網絡。

這是你在找什麼?