oro2 Skrevet 29. mars 2006 Del Skrevet 29. mars 2006 Jeg trenger litt hjelp her, og som overskriften sier er den litt kompkisert, i hvert fall for mitt nivå. Så håper jeg noen her syns den er lett. Holder på å lage et system for registrering av sensur av eksamen. Har følgende tabeller som er relevante for denne spørringen: eksamen oppgave sensur resultat kandidat Denne spørringen (som nå er altfor mange spørringer) skal hente ut resultatene på alle oppgavene på en eksamen for alle kanidater som har tatt den eksamen. Oppgaver er i to nivå. Opgaven har et felt med parent oppgave der alle underoppgaver refererer til den oppgaven som ligger over. F eks oppgave 5b har en referanse til oppgave 5. Som et tre der f eks 1, 2, 3 er noder, og 1a, 1b, 2a, 2b, 2c, 3a, 3b er løvnoder. En eksamen har x antall kandidater som lagres i en egen tabell. En eksamen har x antall sensurer. Altså når en sensor retter en eksamen er det en sensur. Når man retter en oppgave lages det en ny rad i resultat-tabellen som refererer til hvilken oppgave som er rettet, og hvilken sensur den hører til... Så til problemet, det er altfor mange spørringer så jeg vil gjøre det på en mer effektiv måte hvis det er mulig. En eksamen med 23 oppgaver og 200 kaniater fører til at det 4600 spørringer. Slike er det gjort i dag. En spørring henter ut alle hovedoppgavene.. Altså f eks 1, 2, 4, 5. Så kommer det en ny spørring etterpå (etter, ikke inni den første) som henter ut alle deloppgaver for hver hovedoppgave. Til nå er det gjort n+1 spørringer der n er antall hovedoppgaver. (hovedoppgave er øverste nivå av oppgaver, deloppgave er løvnode i treet) Videre kommer det en spørring som henter ut alle kanidater som har tatt denne eksamen. Inni denn whilen (for hver kandidat) er det en spørring til resultat-tabellen som henter poengsummen for denne kandidaten på denne oppgaven. Grunnen til at det er mange spørringer er derfor at det foretas en spørring for hver kanidat for hver eneste oppgave. Jeg har ikke klart å legge dette inn i en spørring som forhindrer dette. En spørring i en dobbelt while er vel ikke helt gunstig for ytelsen? Håper har noen har noen tips til hva jeg kan gjøre her. Spør dersom noe er uklart. På forhånd takk til de som vil hjelpe.. Lenke til kommentar
roac Skrevet 30. mars 2006 Del Skrevet 30. mars 2006 Dette er jo bare en spørring med to joins: select kandidat.nummer, sum(deloppgave.score) from kandidat inner join oppgave on kandidat.id = oppgave.kandidat_id inner join deloppgave on oppgave.id = deloppgave.oppgave_id groupby kandidat Lenke til kommentar
oro2 Skrevet 30. mars 2006 Forfatter Del Skrevet 30. mars 2006 Dette er jo bare en spørring med to joins: select kandidat.nummer, sum(deloppgave.score) from kandidat inner join oppgave on kandidat.id = oppgave.kandidat_id inner join deloppgave on oppgave.id = deloppgave.oppgave_id groupby kandidat 5840473[/snapback] Hei, takk for hjelp. tror jeg må utdype et par ting. Alle oppgavene ligger i samme tabellen. Og resultatene på hver oppgave ligger i resultat-tabellen. I resultat har jeg feltene oppgavenr, sesnurnr, poeng (av de som er relevante). Jeg er nødt til å få ut oppgavene i riktig rekkefølge, altså at alle delopppgavene under den første oppgaven kommer først (altså de med samme parent oppgave), og så kommer alle deloppgavene under oppgave nr 2. Disse ligger i teorien ikke nødvendigvis etter hverandre selv om de vil gjøre det som regel i praksis. Jeg kan forsøke å bygge litt videre på den spørringen du gav og se om jeg kommer noen vei. Lenke til kommentar
roac Skrevet 31. mars 2006 Del Skrevet 31. mars 2006 Det hadde vært mye enklere dersom vi hadde hatt funksjonell kode å jobbe ut i fra, men såvidt jeg kan se er det fremdeles bare snakk om noen joins. Lenke til kommentar
Kirikiri Skrevet 31. mars 2006 Del Skrevet 31. mars 2006 Kan du gi oss kolonnenavnene for hver tabell, og primærnøkler? Da er det enklere å si noe konkret. Du bør egentlig hanke ut alle rader som henger sammen, og så bruke group by eksamen, oppgave, kandidat (og så evt andre kolonner du også bruker uten å gjøre summering på). Jeg tror det du bør ende opp med er en ganske kraftig funksjon, som kan kalles med parameter. Da vil du ha mulighet til å gjøre en del triks for summering og gruppering. Kirikiri Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå