| Visa föregående ämne :: Visa nästa ämne |
| Startad av: |
Meddelande |
kyle
Medlem i: 433 dagar
Status: Offline
#721579
|
Skrivet: 2012-03-12 19:26
Ämne: Relationer mellan tabeller?
|
|
|
Hej. Jobbar just nu på en sida som ska innehålla massa frågor inom olika kategorier. Användarna väljer mellan tre olika radio-buttons och deras svar registreras sedan i databasen.
Problemet är att det kommer fyllas på med väldigt mycket frågor och just nu lagras svaren i "users"-tabellen tillsammans med lösenord och användarnamn. Kolumnerna blir alltså:
"category1_question1"
"category1_question2"
"category1_question3" osv...till slut kommer det vara en enorm mängd kolumner i users-tabellen, vilket inte känns som en bra lösning.
Problemet är att jag måste ha user_id (som även det finns i users-tabellen) för att kunna registrera den aktuella användarens svar. Detta borde ju gå att lösa genom relationer tabellerna imellan, att man kör samma user_id i samtliga tabeller men jag har ingen aning hur man löser detta.
Skulle vara fint om någon kunde tipsa om en guide(svenska/engelska) som förklarar tänket med dessa relationer, eller kanske någon här kan ge lite råd.
MVH
kyle |
|
|
|
| Till toppen på sidan |
|
marabou


Medlem i: 3148 dagar Från: Sveriges framsida
Status: Offline
#721585
|
Skrivet: 2012-03-12 20:46
Ämne:
|
|
|
Hej kyle, Välkommen till PHPPortalen!
Fenomenet kallas "normalisering". Gör en sökning på forumet så finns många detaljerade beskrivningar och länkar.
I ditt fall gör du en eller flera relationstabeller.
Är det kryssfrågor (eller "selectboxar") med fördefinerade svar behöver du tre tabeller (en för användare, en för frågor och en för svarsalternativ), och sedan en för vilka svar användaren har gett (relationstabellen):
1: Användare:
2: user_id username
3: 1 marabou
4: 2 kyle
5: 6: Frågor:
7: question_id question_text
8: 1 Vem skrev "Romeo och Julia"
9: 2 När grundades PHPportalen
10: 11: Svarsalternativ:
12: answer_id question_id answer_text correct_Answer
13: 1 1 Homeros 0
14: 2 1 Guillou 0
15: 3 1 Shakespeare 1
16: 4 1 Defoe 0
17: 5 2 2000 0
18: 6 2 2002 1
19: 7 2 2004 0
20: 8 2 2006 0
21: 22: Användarnas svar:
23: user_id question_id answer_id
24: 1 1 1
25: 1 2 6
26: 2 1 3
27: 2 2 8
|
Har du "fritext"-frågor/svar så byter du ut answer_id i sista tabellen mot ett textfält. |
|
|
_________________ "Never argue with stupid people. They will bring you down to their level and beat you with experience."
- Mark Twain |
| Till toppen på sidan |
|
kyle
Medlem i: 433 dagar
Status: Offline
#721588
|
Skrivet: 2012-03-12 21:54
Ämne:
|
|
|
Tackar för ditt utförliga svar marabou!
Nu är svarsalternativen begränsade till sant, falsk och ett till, vilket i kodens värld ses som värdena 0,1,2. Behöver nog inte en egen tabell för svaren med andra ord!
Kanske skulle det underlätta att köra en tabell för de korrekta svaren, tex:
1: Answers: 2: question_id correct_answer 3: 1 0 4: 2 2 5: 3 1
|
För att sedan matcha dessa mot
1: User_answers: 2: user_id question_id user_answer 3: 1 1 0 4: 2 2 0 5: 3 3 2 6:
|
Lite pseudo-kod:
1: if($user_answer == $correct_answer) 2: //uppdatera poäng 3:
|
En fråga till, om det nu är tillåtet, påverkar storleken av tabeller hastigheten mellan när man ska hämta data ur databasen? Spelar det det någon roll om man har 150 kolumner istället för 50 kolumner?
Tack än en gång för din hjälp! |
|
|
|
| Till toppen på sidan |
|
md2perpe


Medlem i: 3736 dagar Från: Hallonbergen, Kungsbodarna
Status: Offline
#721631
|
Skrivet: 2012-03-14 16:28
Ämne:
|
|
|
| kyle skrev: |
| Spelar det det någon roll om man har 150 kolumner istället för 50 kolumner? |
Det kan ha betydelse eftersom data skickas i paket över nätverket och i hamnar i buffertar av viss längd. Ju färre kolumner, desto mindre data per post, desto fler poster får plats per paket. |
|
|
_________________ 6 + sqrt(64) = 10 |
| Till toppen på sidan |
|
|