Nasıl MySQL tüm oy depolamak ve nasıl düzgün sonuçları taksitli - oylama sistemi

4 Cevap php

Kullanıcıların bir Evet / Hayır / Belki dizi soru kullanarak farklı konularda oy sağlamak için bir sistem geliştiriyorum.

Her soru olarak ağırlıklı olacak 2 (Evet) / 0 (Hayır) / 1 (Belki) NOTE(The users will be voting multiple times, potentially huge amounts)

Planım bir mysql db olarak cevaplar depolamak için.

  1. Ben ayrı ayrı oy saklamak? (ID / Oy /)

  2. Oy sonuçları taksitli uygun bir sorgu nedir?

  3. Sonuçlarını depolamak ve almak için en etkili yolu nedir? Ben oy puanları depolayan bir tablo var mıdır?

4 Cevap

Eğer # 1 yapmak gerekir ana nedeni hiçbir kopyasını (her oy bu rekor ile atıldı, örneğin mağaza IP adresi) oylama sağlamaktır.

senin büyük performans arıyorsanız eğer, size (bir ders göre) ne digg.com yapabilirim bu nitelikteki bazı şeyler yapar. onlar ~ 24 saat bir sona erme ile çoğaltmaları önlemek için IP ile bir memcached düğüm tüm oy saklayın. Onlar daha sonra daemon / cron işi kalıcı / db katmanında gelip oy taksitli ve toplu bir biçimde saklayabilirsiniz var.

Yerine ben oy 3 farklı türleri için taksitli sistemi olarak DB kullanmak istiyorum, DB ağırlıklı değerleri saklamak olmaz. Bunu da 3 alanları ile 1 tablo olabilir

Alanlar: Evet, Hayır, belki bütün tamsayılar. Başlangıçta 0'da alan değerleri başlar. Bir oy gelir her zaman, uygun alan değerini artırmak.

Sonra, kod ağırlıklı matematik yapmak. Sayısı çarpılarak gibi basit bir örnek olarak, ağırlıklı sonuç almak için 2 ile "evet" alanına söylüyorlar.

Oy meselesi toplamları ise bu tabii ki, ve ayrı ayrı her seçmen tercihini saklamak umurumda değil.

Teklik sağlamak için ben kullanıcı, ilk kullanıcı olarak zaten belirli anket için oy bayrak can bu şekilde yukarı kayıt yapmak istiyorum, bu yüzden tekrar oy veremezsiniz. Onlar her zaman olsa, tekrar kayıt olabilirsiniz. Ne yazık ki onlar sadece başka bir bilgisayarı, bir proxy sunucusu veya bir sürü insan gibi kullanabilirsiniz, etrafında almak zor bulunuyor olması bu tür durumlarla sınırlamak mağaza IP ait olsa bile, sadece, tekrar oy modem yeniden başlatma gerektirir dinamik IP.

Düşünün bir şey: Her bir oy depolamak ayrı ayrı kolay IP tarafından oylamaya kısıtlamak için yapar.

Ben sadece denetim veya günlük amaçlar için her oy saklamak gerekir düşünüyorum.

Sana soru başına bir satırda tüm yapabileceğini tahmin ediyorum.

bu yüzden:

Voteid QuestionID VoteTally

Ve sonra sadece votetally bir güncelleme çalıştırabilir. hiçbir şey yapmak, zaman, belki, 1 eklemek ne zaman, evet, 2 ekleyin.

Bir durum çubuğunu kullanarak, kullanıcıya geri sonuçlarını görüntülemek için gidiyorsun? eğer öyleyse, o zaman evet bilgi depolamak gerekir.