我有一個博客/論壇系統upvotes/downvote和每個評論也可以有upvote/downvote像reddit/stackoverflow系統。PHP/MYSQL用戶博客/論壇投票系統
哪種方法可以確保已經投入使用的用戶無法再次提供投票?
我確實考慮過創建一個帶有單獨upvote表的新行的可能性。但是如果一篇文章有30條評論,那麼腳本最終會做30條數據庫查詢,這也會給我的服務器帶來巨大的負擔。另一種可能性是爲用戶的每個upvote做一行,一起查詢它們並檢查post_id,這又是不可行的。
那麼哪個是upvote/downvote系統的最佳方式,以及像stumbleupon/reddit這樣的網站做什麼?就在他登錄的那一刻,他可以看到一個紅色的顏色,可能是他已經投了票的帖子
我會做的是做一個單獨的數據庫表,每個職位有一個行,每行有一列存儲已投票的用戶數組。所以基本上如果用戶1,2,5和8都投了票,你可以將它存儲爲[1,2,5,8](作爲json存儲,所以你可以'json_decode'它稍後使用它。1數據庫調用 – GrumpyCrouton
「該腳本最終會做30個數據庫查詢「爲什麼?如果用戶提出了特定的評論,那麼您只需要檢查一個評論,看看他們是否投票過它。這是一個非常簡單的SQL查詢來做到這一點。在評論表中加入評論ID的投票表,並且包含用戶ID以及它是否是向上/向下投票,然後你對評論ID /用戶ID組合進行查詢,他們不太可能嘗試並投票全部30個,如果你認爲這是一種可能性,那麼你需要設計你的系統足夠的規模,和/或使用足夠強大的硬件。 – ADyson
*「另一種可能性是爲每個用戶upvote做一排,查詢它們並檢查post_id又是不可行的。「* ...爲什麼這是不可行的?聽起來像一個簡單的連接用戶ID,問題ID(作爲複合PRIMARY KEY可能)和投票記錄(+1或-1作爲簽名TINYINT(2)) – CD001