2011-10-11 94 views
0

我有一個問題,你可能會認爲這是愚蠢的,但無論如何PHP,MYSQL raiting評論

在PHP的意見作出,同時,我認爲這將是冷靜,如果人們能率與+ 1/-1這樣評論我做一個表在DB的意見(ID,USER_ID,評論,時間),另一種用於評價意見(id_rate,id_comment,id_user,時間),我用的是id_user所以他不能評價相同的註釋

兩次

很好的問題是:如果一個博客帖子有一個像100層的意見,每個人都有像200票(+1或-1)不會是網頁加載速度太慢,很多很多的查詢只加載幾點意見?

大約是另一種方式來做到這一點之後DB的正常形態?

感謝您的時間,我真的很感激。

回答

1

要得到的意見和他們的收視率可以在一個SQL查詢來完成。當你有很多評論和評級時,它會很慢,但不是你提到的數字。

如果你想更快,您可以創建名爲「評級」或類似的東西的評論的屬性,並對其進行更新每隔一小時(或多久,你覺得就足夠了)左右。它不是確切的,但它將近似評論。但我們正在談論數以百萬計的評論和評級,在這之前,這只是一個問題。

這通常會用物化視圖來完成,但不幸的是在MySQL中沒有實現...您可以通過編寫一個php腳本並通過cronjob運行來使用上述方法。

使用這樣的查詢(未經測試):

SELECT * 
FROM comments, ratings 
WHERE comments.id = ratings.id_comment; 

假設你一個值添加到您的投票(+1或-1),你可以將它們分組,並在這樣一個查詢計算出總的commentrating(未經測試):

SELECT comments.id, comments.user_id, comments.comment, 
     comments_time, SUM(ratings.value) AS rating 
FROM comments, ratings 
WHERE comments.id = ratings.id_comment 
GROUP BY comments.id; 

現在將所有的commentfields和計算commentrating作爲字段rating。如果您想加速測試,您可以嘗試插入一百萬個虛擬評論和一百萬個評分,並查看查詢需要多長時間。

加快它更可以在comments.id_comment添加索引是這樣的:

CREATE INDEX speedthisthingup ON comments(id_comment); 

這將有助於執行了大量時間:)

祝你好運!

0

您可以使用另一個字段commentvote將當前評論投票緩存在comments表中。否則,檢查評級評論表以驗證用戶尚未投票應該相對較快且具有適當的索引。