Gå til innhold

Hjelp til "komplisert" spørring


Anbefalte innlegg

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
Videoannonse
Annonse
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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...