Bir kullanıcı başına birden fazla soru anket sonuçlarını depolamak için en iyi yolu?

3 Cevap php

Ben beş 1-5 yıldızlı derecelendirme sahip bir anket var ve her kullanıcı için ayrı ayrı değerleri saklamak gerekir. Ben bu sayılan değerleri (1, 2, 3, 4, veya her derece için 5) saklamak ve bunları kolayca ayıklamak bitfields benzer bir yöntem var mı?

Benim en iyi bahis tefrika PHP dizi saklamak olacaktır Ancak şu anda bu alan biraz alacaktı. Ya da, ben de (israf alanı) yapmamayı tercih ederim 5 sütun oluşturun.

3 Cevap

Bu konuda benim ilk düşünce kullanarak ve bu gibi değerleri depolamak:

$a="15540";

Kullanıcı son soruya cevap vermedi. $ A [0] olan ilk oyların değeri: 1.

Belki hızlı ama basit.

Peki, ne yaparsanız yapın, kesinlikle mümkün cevap başına bir sütun oluşturarak denormalize yok. Eğer bir veritabanı kullanıyorsanız, en esnek şekilde böyle bir şey verilerinizi depolamak olacaktır

table polls
poll_id
description

table poll_questions
question_id
poll_id (foreign key to polls)
question_text

table question_answers
answer_id
question_id (foreign key to poll_questions)
answer_text

table user_answers
id
user_id (foreign key to users)
answer_id (foreign key to question_answers)

Nedeniyle hızlı yapmanız gerekebilir katılır olsa, korumak için en kolay yoldur.

Bu göz önüne alındığında bazı noktalarda bazı istatistikleri almak istiyorum için gidiyoruz bir ankettir.

Bir CHAR(5) düz veya VARCHAR(5) hangi MySQL String Functions tek cevap değerini elde etmek için kullanıyor olacak durumda cevapları saklayabilirsiniz ya. Eğer DB istatistikleri hesaplamak gerekmez sonra sadece dize seçin. PHP Dize elemanları köşeli parantez Dizi elemanlarını erişmek aynı şekilde erişebilirsiniz. $answers = "42133"; $first_answer = $answers[0]; $second_answer = $answers[1]; ve. Sen $answers = $first_answer . $second_answer . $third ... ya da bir dizi imploding tarafından $answers = implode($answer_array); concating tarafından cevap dize inşa edebilirsiniz

Daha basit bir yaklaşım Artem gibi DB önerilen normalleştirmek olacaktır.