2011-10-08 80 views
2

我在網站上有一個評論部分,如果可能的話,我想簡化一下,所以它對數據庫沒有那麼大的影響。當用戶選擇帖子時,如果它有與其相關的評論,它會列出評論。當評論列表時,它從另一個表中提取用戶名。我將用戶的ID存儲在註釋表中,並使用該ID從用戶表中選擇記錄。並顯示爲「用戶」說:從數據庫中獲取多個用戶名

可以說我對一個帖子有1000條評論,它會敲1000次用戶名抓取用戶名。我認爲這可能是一個糟糕的設計。我想到了一些解決方案,但不知道在這種情況下會推薦什麼。

我應該只是在評論表中存儲用戶名?

我應該存儲已在會話數組中調用的所有用戶名嗎?

把所有用戶名放在一個文件中,並從文件中調用?

還是有另一種解決方案,我沒有想到?

我有點困惑。我以爲我在評論表中使用ID做了正確的事情,然後用它來獲取用戶名,但在閱讀了大約一百萬篇關於對數據庫影響較小的文章之後,我開始質疑自己。

哇,謝謝你的所有有用的答案。這裏是桌面方案,我不知道爲什麼我原來沒有投入。

的笑話意見表:

id | author_id | joke_id | date_created | body 
---+-----------+---------+--------------+----- 
1 |  3  | 2 | 2011-06-12 | this is a comment 

,併爲用戶:

id | user_name | password | email | date_joined | visible 
---+-----------+----------+-------+-------------+--------- 
3 | booboo | password | email | todays_date | 1 
+0

你你使用'JOIN',還是做多個查詢? –

+1

如果您將表格方案添加到問題中會更好。 –

+0

如果您的表中存在關係而不是使用**連接**每次只有一個包含所有信息的查詢時,不需要觸發查詢。 – punit

回答

3

這是JOIN s爲爲 - 讓您可以運行一個查詢,高效地獲取綜合信息來自多個表格。例如:

SELECT comments.id, comments.content, users.name 
FROM comments 
JOIN users ON comments.user = users.id 
WHERE comments.id in (1,2,3) 

會查找ID爲1,2和3的3條評論,再加上還可以得到每個評論者的用戶名,並返回這個樣子行:

comments.id | comments.content | users.name 
------------+-------------------+--------- 
1   | "First comment." | "Poster1" 
2   | "Second comment." | "Poster2" 
3   | "Third comment." | "Poster3" 
-1

你允許多次使用相同的用戶名?如果不是,那麼我會使用username字段作爲您的users表的PK,並將其作爲FK存儲在comments表中。這將很好地解決你的問題。

如果更改您的users表的PK值太大,則請將用戶名存儲在comments部分,因爲您仍然可以使用該表從users表中選擇單個記錄。

+1

-1,重新設計一個數據庫以避免連接是....沒有幫助。 – Johan

3

聽起來你在你的評論表中有一個userID字段,但需要查找用戶名,正確嗎?如果是這樣,一個JOIN將是最好的解決方案。

喜歡的東西:

SELECT * 
FROM `comments` 
LEFT JOIN `users` ON `users`.`id` = `comments`.`userid` 
WHERE `postid`='1' 

要了解更多關於加入和他們的無限可能,閱讀起來here

+0

感謝您的鏈接。我用過幾次tizag.com。出於某種原因,加入似乎在我的頭上。這並不是我不明白他們,他們只是讓我迷惑我設置查詢。 –

0

SELECT * FROM comments LEFT JOIN users ON comments.posterid = users.id

谷歌爲LEFT JOIN更多信息:)