webForumDet fria alternativet

Design av frågedatabas

11 svar · 585 visningar · startad av Type

TypeMedlem sedan mars 20021 239 inlägg
#1

Hejsan
Jag behöver verkligen hjälp. Jag sitter här o börjar bli riktigt stressad. vet inte hur jag ska lösa ett problem jag har...

Det är så att jag har ca 10 frågor som lyder:
Innan minus kom till Linköping har minus:
- haft sommarlov
- letat bostad i linköping
- arbetat
- ätit godis
- rest utomlands
- osv
- osv

Det är ungefär 10-15 olika kryssalternativ som användarna kan fylla i. Svaren ska sedan lagras i databasen. Om man sen tex har kryssat i vissa ska ett script räkna ut hur man är som person.

Problemet är hur jag ska spara all denna data på ett så smidigt sätt som möjligt. Vissa av dessa alternativ kommer att ändras nästa år så det vore bra om dessa låg i en tabell på något sätt.

Nu ligger alternativen hårdkodade i koden och det finns en jättetabell med en kolumn för varje alternativ. Om användaren kryssar i ett alternativ blir det en etta i den kolumnen. Som ni säkert förstår blir det en jättestor tabell (10 frågor med 15 alternativ blir 150 kolumner). Nu är det kanske bara 5 frågor men det blir ändå en väldigt stor tabell...

Hur kan man lättast lagra datan på ett bra sätt?

Jag är tacksam för snabba svar.. helst före morgondagen...

LaspMedlem sedan juli 200012 980 inlägg
#2

Att ha en tabell med många fält är fel, det har du rätt i. En tabell för individen samt Id
Svarsalternativen skapas i en tabell med giltigt from - tom. samt en nyckelkod.
Kryssen sparas med Id,nyckelkod samt svarsalternativ eventuellt timestamp dvs. datum klockslag.
Tre tabeller i grunden men det kan vara en enkätrelation också.

PeeerMedlem sedan mars 20025 907 inlägg
#3

Jag hade nog kört något sådant här

användare:
*användar-id
*namn
*telefonnummer
*annat tjaffs

frågor:
*fråge-id
*fråga

svar:
*fråge-id (för att kunna koppla svaren till en fråga)
*svars-id
*svarsalternativ

användarsvar:
*användarid
*frågeid
*svarsid

Dvs man kommer få en post i "användarsvar"-tabellen för varje kryss man väljer.

TypeMedlem sedan mars 20021 239 inlägg
#4

toppen Peeer och Lasp, tack för hjälpen. Jag ska nog fixa det med er hjälp. hör av mig här om jag får problem när jag kommit så långt i implementationen...

TypeMedlem sedan mars 20021 239 inlägg
#5

Nu har jag börjat spara undan värden. Då får jag genast problem... :(

Jag sparar in namn, telefonnummer o annat tjafs i användartabellen. Då skapas ju ett automatiskt id (auto-increment). Det är ju sedan det numret som ska in i användarsvarstabellen. Men hur gör jag för att få tag på det id:t?
Ett alternativ är ju att köra en

select id from users where namn='användarnamnet'

... innan man sparar i svardatabasen men om några heter samma sak blir det ju problem?

Kan man på något smart sätt spara allt på en gång?

LaspMedlem sedan juli 200012 980 inlägg
#6

Id bör kanske inte vara automatgenererat! Exempelvis finns det ju ersonnummer.
Eller så skapar du ett eget unikt ID och kollar att det är unikt innan du sparar huvudposten.

TypeMedlem sedan mars 20021 239 inlägg
#7

Lasp skrev:

Id bör kanske inte vara automatgenererat! Exempelvis finns det ju ersonnummer.
Eller så skapar du ett eget unikt ID och kollar att det är unikt innan du sparar huvudposten.

ooh. Krångligt. Jag vill helst inte spara personnummer (känns som man inte får spara personnummer hur som helst).
Att skapa unikt ID var jag inne på men det är inte heller helt hundra. Går det inte att köra insert på två samtidigt alltså? Då är ju unika ID enda sättet? Tycker det känns konstigt att man inte kan fixa det här med relationer bättre...

TypeMedlem sedan mars 20021 239 inlägg
#8

Jag tror jag har hittat en funktion som löser det jag har problem med. Tack vare den superba sökfunktionen :D:

funktion: LAST_INSERT_ID()

Jag återkommer om jag får problem. Om det finns något ännu smartare sätt att lösa det är jag tacksam för svar.

PMedlem sedan jan. 20012 204 inlägg
#9

Lycka till med nollnigen, några år sen man själv var minus, kul :)

TypeMedlem sedan mars 20021 239 inlägg
#10

hehe :D Tack

Jag har fortfarande ett problem. last_insert_id() hämtar ju senaste id-t. det är skitbra. däremot vill jag lägga till fler än en post i användarsvarsdatabasen och då funkar ju inte last_insert_id längre eftersom det efter första riktiga id-t har lats till kommer det nya id-t bli den senaste postens id. Kan man på något sätt spara undan id-t som i första omgången kommer från last_insert_id()?

PeeerMedlem sedan mars 20025 907 inlägg
#11

Ska du lägga till flera användare samtidigt? En möjlig lösning är att du hämtar ut last_insert_id() innan du lägger till den sista användaren. En annan lösning är att du plockar ut de två högsta id-numren från tabellen (förutsatt att du har id-nummer så växer).

select id from users order by id desc limit 2
PMedlem sedan jan. 20012 204 inlägg
#12

Peeer skrev:

Ska du lägga till flera användare samtidigt? En möjlig lösning är att du hämtar ut last_insert_id() innan du lägger till den sista användaren. En annan lösning är att du plockar ut de två högsta id-numren från tabellen (förutsatt att du har id-nummer så växer).

select id from users order by id desc limit 2

Då är det väl inte helt säkert att man få de som man lagt till, någon annan kan ju lägga till mellan de poster som man själv lägger till.

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)