2011-10-04 10 views
0

데이터베이스에서 기록을 가져와 사용자가 "투표"(사전 설정 옵션이 아닌 텍스트 필드)하고 시스템에서 결정하도록 허용하는 시스템을 구축하려고합니다. 3-5 개의 동일한 응답이 수신되면 '최종 응답'을 작성하고 계속 진행합니다.MySQL/PHP Logic "투표"시스템

예를 들어 "Bob"이라는 레코드가 있다고합시다. Bob에게 어떤 도시가 출현했는지 묻습니다 ... 미리 설정된 옵션이 없으므로 사용자는 텍스트 형식으로 대답해야합니다. 쓸데없는 항목이 있음을 시스템이 이해하기를 바랍니다. 누군가 '보스턴'이라고 말하면 다른 사람이 '뉴욕'이라고 말하고 다른 세 사람은 '애틀란타'라고 말하면 시스템에서 애틀란타가 우리가 가서 답으로하고 최종 답장으로 설정한다는 것을 이해하기를 원합니다.

정확히 우리가하는 것은 아니지만 설명을 위해 단순화 된 버전입니다.

내가 도움이 필요한 것은 MySQL과 PHP를 사용하여 이와 같은 코드를 작성하는 가장 좋은 방법을 찾는 것입니다. DB에 어떻게 저장해야합니까? 가짜 답변을 처리하고, 답변이 한 번 주어지는 횟수를 추적합니다 (위의 예에서는 애틀란타).

기본적이고 비효율적 인 방법은 다음과 같습니다. 각각의 대답에 대한 열을 가지며 선택 될 때 그 열의 숫자에 1을 더하는 것입니다. 그 수가 3에 도달하면 우리는 끝 과정을 시작합니다.

미리 도움을 청하십시오! 알렉스

+0

메인 테이블과 관련된 다른 테이블에 응답을 저장하고 대답이 주어질 때마다 해당 테이블의 ans를 추적하고 필요한 카운트가 끝날 때 프로세스를 종료하는 것이 중요합니다. (너무 많은 잘못된 답이 주어지면 테이블에 원치 않는 레코드가 가득하기 때문에) – punit

답변

0

내 본능이 말을하는 것입니다 :

  • 다른 테이블의 질문 "밥 출신을?"참조 아마도 ID (에 투표하는지에 대한 열
  • 열입니다. 사용자의 답변을 (어느 정도 정규화).
  • 열을 정보 (IP 주소, 사용자 ID 가능한 경우 등)를 추적. 이것은 당신이 감지하고 스팸 entri을 제거하게됩니다

동일한 사용자 및/또는 IP에서 같은 질문에 대해 다시 투표를 프로그래밍 방식으로 거부합니다.

다음 질문에 "최종 답변"이 포함되어 있는지 확인하려면 투표 수 (응답이 제출 될 때마다)를 계산하고 3-5 표적이되는지 확인하십시오. 효율면에서 볼 때, 제출 된 답변을 확인하는 것만으로 충분할 것이라고 생각합니다. 다른 응답은 거짓으로 투표하지 않습니다.

0

쉬운 해결책은 없습니다. 정적 선택이 아닌 자유 텍스트 입력을 허용하기를 원하기 때문입니다. 누군가에게 자유 텍스트 옵션을 주면 언제든지 다른 결과를 얻을 수 있습니다. 두 명의 사용자가 동일한 것을 입력하는 것을 의미하더라도 그들은 다르게 입력 할 수 있습니다. 간단한 해결책은 두 사람이 샌프란시스코에 입국하는 것입니다. 다른 하나는 "샌프란시스코"에 들어가고 다른 하나는 "샌프란시스코"에 들어갈 수 있습니다. 그리고 다양한 조합이있을 수 있습니다. 특히 사람들이 잘못 철자하거나 속어를 사용하는 경우.

귀하의 상황에 맞는 무료 텍스트를 피하는 것이 좋습니다. 그러나해야 할 일이 있다면, 당신은 당신의 제안과 비슷한 대답의 데이터베이스를 만들 수 있습니다. 일반 텍스트 응답 대신 다른 접근 방식을 사용하는 것이 좋습니다. 어쩌면 MySQL Soundex Function 일 수 있습니다. 그러면 사용자가 입력 한 사운드를 나타내는 문자열이 반환됩니다. 이것은 사용자가 단일 단어를 입력하게한다고 가정합니다.의 soundexes를 비교하여 추가로 확장 할 수 있습니다 (유사한 발음의 단어를 찾으려면).

soundex를 사용하면 약간 더 나은 결과를 얻을 수 있지만 여전히 문제가 발생하기 쉽습니다. approximate string matching, 정규 표현식 및 PHP의 similar_text function과 같이 많이 사용할 수있는 것들이 많이 있습니다. 이것들은 모두 결과를 향상시킬 수 있지만, 모두 복잡성을 더할 수 있습니다.

그러나 내가 알기로는 쉬운 해결책이 없다.

+0

자동 완성 시스템을 사용하여 미리 정의 된 답변 목록을 사용하면 어떨까요? 이렇게 투표 시스템을 어떻게 설정합니까? 가장 큰 질문은 우리가 같은 반응을 3 ~ 5 회하는지 알아내는 것입니다. – jalexsmith

+0

미리 정의 된 답변 목록이있는 경우 각각에 대해 간단한 카운터를 수행 할 수 있습니다. 그것은 가장 직접적인 접근 방식 일 것입니다. 그리고 내가 토론 한 모든 복잡성을 제거 할 것입니다. – Marshall

관련 문제