mboost-dp1

Mysql opbygning til poll


Gå til bund
Gravatar #1 - hundeboll
14. okt. 2003 10:35
Hej

Jeg skal lave en poll i php med mysql, men kan ikke helt hitte ud af, hvordan den skal bygges op i mysql.

Poll'en skal minde lidt den der er her på newz, med ny poll hver uge og skal kunne administreres fra selve hjemmesiden af en admin.

Skal man lave en tabel til hver poll, eller skal der være en tabel med rows til hver uge oder was?
Gravatar #2 - Wolly
14. okt. 2003 13:59
Jeg lavede en for et par måneder siden, hvor jeg kun brugte en tabel. Først et id, og så en integer der fortalte hvor mange svarmuligheder der var. Derefter var resten blot 10 felter med text og 10 felter med integers til at tælle op.
Super simpelt og var MEGET nem at lave, og arbejde med efterfølgende...

Jeg siger ikke at det er den bedste måde, men den var sq hurtigt lavet, og virkede perfekt. Tror vist nok jeg er kommet til at slette den, inden jeg uploadede den til siden :-(
Gravatar #3 - RedCalf
15. okt. 2003 09:23
Jeg ville nok ikke spørge newz.dk om hvordan de har lavet deres poll, for den kan ikke regne :)

Mandag er?
Ugens værste dag. (883)
Så længe jeg ikke skal op før 12 er den ok. (684)
Hverken bedre eller værre end andre dage. (662)
kanon, jeg skal på arbejde. (308)
Stemmer i alt: 2541

Min hovedregning siger: 2537
Gravatar #4 - Deternal
15. okt. 2003 09:31
id, pollnr, spørgsmål.

Er en måde - og så bare print where pollnr == x

Alternativt:

id, spørgsmål.
id, pollname.
id, pollid, questionid.

Hvor den sidste tabel samler de spørgsmål der hænger sammen med en specifik poll.
Det vil selvfølgelig skabe 3 arrays - men så får man også lidt skæg med at jonglere :))

Den sidste, hvis sat ordentligt op vil bruge mindst plads i mysql db'en.

Hvis jeg forstår Wolly ret, vil hans metode gøre at man max kan have 10 spørgsmål (og der vil blive brugt plads som hvis man skrev 10 spørgsmål ved hver poll).

Her er der kun MySQL pladsbegrænsning - men til gengæld sviner man ikke så meget med pladsen hvis man laver en ja/nej poll :)
Gravatar #5 - Wolly
15. okt. 2003 16:20
#4

Yeps du forstod mig ret, men jeg sagde jo heller ikke noget om at db'en var optimeret :-)

Jeg ved naturligvis godt at måden jeg lavede det på ikke var den bedste, men den var nem og tilstrækkelig til de fleste formål...
Gravatar #6 - Deternal
15. okt. 2003 16:48
#5: Fair nok :) Og ja det ser dejligt simpelt ud.
Min største anke er som sagt manglende mulighed for at vælge antal spørgsmål samt den store spildplads i db'en.

Problemet er webhosts som kun giver 3-5MB plads til en mysql db (selvom det self kræver lidt at nå derop - har lavet et CMS hvor alt content lå i mysql som havde en ok del indhold ift. så mange andre steder og samlet kom siden op på omkring 3MB (inkl. gfx, og mysql db - eks. downloads).
Gravatar #7 - hundeboll
15. okt. 2003 19:45
Når du skriver 'id, pollnr, spørgsmål', hvor skal svarmulighederne så være?

ved ikke om det er for meget at forlange, men det ville hjælpe meget, hvis jeg kunne få det grafisk.. Kan sq bedre overskue det, som det står i phpmyadmin. En slags tabel.

id     pollnr     question     answers
Gravatar #8 - Acro
15. okt. 2003 22:26
Jeg ville lave 3 tabeller.

tbl_Polls
> fld_Poll_Id
> fld_Poll_Title

tbl_Polls_Options
> fld_Poll_Id
> fld_Option_Id
> fld_Option_Title

tbl_Votes
> fld_Vote_Id
> fld_Poll_Id
> fld_Option_Id

I den sidste tabel ("tbl_Votes") har du så muligheden for at tilføje yderligere felter, der kan gemme IP-adresse eller brugernummer, og på den måde kan du lave check for hvem der allerede har stemt.

De andre tabeller vil jeg mene giver sig selv, ellers spørg endelig.
Gravatar #9 - Wolly
16. okt. 2003 14:27
Well jeg havde nok glemt "spørgsmålet" i mit første forslag :-)

Here we go:

"id"
"antal svarmuligheder"
"spørgsmål"
(
"svarmulighed"
"tæller"
) X 10

Husk hvis du bruger denne metode, at du kun kan have 10 svar muligheder, og at den absolut ikke egner sig til en side men flere tusinde besøgende, eller mange votes; 100+

Man kan jo altid tilføje en dato for votens start, hvis man ønsker. Hvor vidt brugerne allerede havde stemt, afgjore jeg med en cookie.

Hvis det er til en større side, ville jeg nok lave noget lignende Acro's løsning.
Gravatar #10 - Acro
16. okt. 2003 17:47
#9 @Wolly:
Jeg ville vælge min uagtet hvad(!), den er nemlig langt mere fleksibel - og er også udemærket til et websted der kun har få besøgende, netop fordi det er lettere at integrere andre funktioner.

Min løsning er også let at udvide hvis man vil tilføje ekstra sikkerhed, for en cookie-baseret afstemning giver på ingen måde sikkerhed for resultatet, og vil man derfor gemme noget yderligere skal din løsning alligevel udvides.

Men det er sikkert detaljer.
Gravatar #11 - hundeboll
16. okt. 2003 17:49
Acro... Hvis nu det skulle vise sig, at der kommer mange besøgende (det gør der nok ikke lige foreløbigt), vil det så ikke blive en pænt stor database, når man skal gemme en række til hver stemme ?
Gravatar #12 - Acro
16. okt. 2003 18:10
Det er meget muligt, men hvis du skal holde styr på stemmer i en anden tabel - så fylder det mindst ligeså meget, og så har du ikke mulighed for at lave udvidet statistik.

Hvis du sammen med din stemme tilknytter en IP-adresse eller et brugernummer, så kan du trække ud hvor mange drenge der er 19 år, istedet for at trække ud hvor mange drenge der er, samt hvor mange 19 årige.

Du får altså bedre muligheder, og det er nok stadig begrænset om der skulle gå plads til spilde.

Alternativt kan løsningen ændres så man med "tbl_Polls_Options" tilføjer et felt, der hedder "fld_Option_Votes" og holder styr på antallet af stemmer.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login