2011-10-04 144 views
0

我試圖建立一個系統,該系統將記錄從我們的數據庫,允許用戶「投票」就可以了(文本字段,而不是預設選項),並有系統的決定當收到3-5份相同的答覆時,請做出「最終答案」並繼續。的MySQL/PHP邏輯「投票」系統

例如,假設我們有一個名爲「鮑勃」的紀錄。我們會問用戶鮑勃來自哪個城市......沒有預設選項,因此用戶必須以文本形式回答。我希望系統瞭解可能有垃圾條目。所以如果有人說'波士頓',其他人說'紐約',另外三個人說'亞特蘭大',我希望系統明白亞特蘭大是我們要解決的問題,並將其作爲最終答案。

這不正是我們正在做的事情,但它是爲了解釋的目的簡化版本。

我需要被搞清楚的代碼像這樣使用MySQL和PHP的最佳途徑幫助。我們應該如何將這些數據存儲在數據庫中,我如何處理假的答案,跟蹤一次給出答案的次數(在上例中爲亞特蘭大)等。

這樣做的一種基本和低效的方法是爲每個答案設置一個列,並在列選中時在列中添加一個....當該數字達到3時,我們觸發結束過程。

在此先感謝您的幫助! 亞歷

+0

它是連接器,用於將答案存儲在與主表格相關的不同表格中,並且每次給出答案時都會跟蹤該表格中的答案,並且如果達到所需的數量,則會結束您的過程。 (因爲如果給出的錯誤答案太多,您的表格中充滿了不需要的記錄) – punit

回答

0

我的直覺是說:

  • 一種你在(也許是引用另一個表中的問題「在哪裏從鮑勃?」的ID投票哪一列
  • 列。針對用戶的回答(規範化到一定程度)。
  • 列跟蹤信息(IP地址,如果有用戶ID等)。

這將讓你偵測和清除垃圾郵件entri並且在編程上拒絕來自同一用戶和/或IP的相同問題的重新投票。

然後確定何時一個問題有其「最終的答案,」你可以算拉選票(每一個答案提交時間),並查看是否您已經達到3-5票的門檻。爲了提高效率,我想你只需要檢查提交的答案,因爲其他答案不會虛假地獲得投票。

0

對此沒有簡單的解決方案。因爲你想允許自由文本輸入而不是靜態選擇。任何時候你給別人免費文本的選項,你應該期望得到不同的結果。即使兩個用戶意味着輸入相同的東西,他們也可能以不同的方式輸入。一個簡單的解決方案是兩個人進入舊金山。一個人可以進入「San Fran」,而另一個進入「SanFrancisco」。而且可能有很多不同的組合。特別是當你解釋人們拼寫錯誤或使用俚語時。

我會強烈建議避免您的具體情況自由文本。但是,如果你必須這樣做,你可以建立一個類似於你的建議的答案數據庫。我會建議使用不同的方法,而不是純文本的答案。也許是MySQL Soundex Function。這將返回一個字符串,表示用戶輸入的聲音。這假設你讓用戶輸入單個單詞。您可以通過比較soundexes的levenshtein distance來進一步擴展它(找到類似的聲音詞)。

使用soundex可能有助於將事情稍微好一點,但仍然容易出現問題。你可以使用很多不同的東西,比如approximate string matching,正則表達式和PHP的similar_text function。這些都可以改善你的結果,但都會增加複雜性。

但據我所知,沒有簡單的解決方案。

+0

如果我要使用預定義的答案列表,使用某種自動完成系統,該怎麼辦?我將如何建立這樣的「投票」系統?我最大的問題是如何弄清楚我們是否有三到五個相同的回答。 – jalexsmith

+0

如果你有一個預定義的答案列表,那麼你可以爲每個答案做一個簡單的計數器。這將是最直接的方法。並且會擺脫我所討論的所有複雜性。 – Marshall