12. april 2007 - 09:27Der er
42 kommentarer og 1 løsning
Udvælgelse af specifkke data
Hej
Jeg er ved at lave et quizsystem, hvor alle spørgsmål ligger i en database. Spørgsmålene er inddelt 3 katagorier men de ligger alle i samme tabel. Nu vil jeg så gerne udtrække 5 tilfældige spørgsmål fra hver katagori. Nu er spørgsmålet så om dette kan gøres i en sql sætning eller jeg skal trække dem ud 5 ad gangen?
Har indtil videre dette stump kode som udtrækker 5 tilfældige i en katagori
randomize R=clng(100000*rnd)
oRS.Open "SELECT TOP 5 * FROM sprg WHERE (cat= '1') ORDER BY rnd(-(ID)*" & R & ")"
hmm skal det forståes som to forskellige løsningsforslag? Den første forstår jeg muligvis - vil koden så se sådan her ud
oRS.Open "SELECT TOP 5 * FROM sprg WHERE (cat= 1) ORDER BY rnd(-(ID)*" & R & ") UNION SELECT TOP 5 * FROM sprg WHERE (cat= 2) ORDER BY rnd(-(ID)*" & R & ") UNION SELECT TOP 5 * FROM sprg WHERE (cat= 3) ORDER BY rnd(-(ID)*" & R & ")"
If its a variable then you will need to build the SQL in code as you did in your example 12/04-2007 10:01:02. Then forget about the query I mentioned 12/04-2007 09:48:48.
...vil koden så se sådan her ud
Yes, but I dont know if it is 100% correct, so I cant say if it will work as it is.
SELECT TOP 3 Tabel.Spørgsmål, Tabel.SpørgsmålID, Tabel.Valgt FROM Tabel WHERE (((Tabel.Valgt)=False) AND ((randomizer())=0)) ORDER BY Rnd(IsNull(Tabel.SpørgsmålID)*0+1);
HEj Terry, hmm lader ikke rigtig til at virke, jeg kan godt vælge dem ud men ikke få lov til at udvælge dem tilfældligt hver især. Får denne fejl.
[Microsoft][ODBC Microsoft Access Driver] The ORDER BY expression (rnd(-ID*97015)) includes fields that are not selected by the query. Only those fields requested in the first query can be included in an ORDER BY expression.
Til Jensen, så er jeg ikke helt sikker på du har forstået spørgsmålet, da jeg ikke kun vil lave et udtræk og sortere, men 3 forskellige udtræk og sortere
oRS.Open "SELECT TOP 5 * FROM sprg WHERE (cat= 1) ORDER BY rnd(-(ID)*" & R & ") UNION SELECT TOP 5 * FROM sprg WHERE (cat= 2)UNION SELECT TOP 5 * FROM sprg WHERE (cat= 3)"
Altså uden order på de sidste to udtræk..........men det er bare ikke godt nok da disse jo også skal sorteres tilfældigt
SELECT TOP 5 Tabel.Spørgsmål, Tabel.cat FROM Tabel WHERE (((Tabel.Cat)=1) AND ((randomizer())=0)) ORDER BY Rnd(IsNull(Tabel.Spørgsmål)*0+1) UNION SELECT TOP 5 Tabel.Spørgsmål, Tabel.cat FROM Tabel WHERE (((Tabel.Cat)=2) AND ((randomizer())=0)) ORDER BY Rnd(IsNull(Tabel.Spørgsmål)*0+1) UNION SELECT TOP 5 Tabel.Spørgsmål, Tabel.cat FROM Tabel WHERE (((Tabel.Cat)=3) AND ((randomizer())=0)) ORDER BY Rnd(IsNull(Tabel.Spørgsmål)*0+1)
tak, Jeg går ud fra at "Tabel.cat" er navnet på min tabel og kolonne ik? men hvorfor kan jeg ikke bare vælge *? Nu har jeg prøvet din kode men får denne fejl
[Microsoft][ODBC Microsoft Access Driver] Undefined function 'randomizer' in expression.
Til Terry. Kommentar: terry 17/04-2007 10:19:58 you need to include ORDER BY rnd(-(ID)*" & R & ") in each of the SELECTS
Jamen det er jo det jeg skriver som giver fejl.... kun hvis jeg includerer order by en gang virker det, men så snart jeg bruger den flere gange får jeg fejl.
Det andet du forslår virker heller ikke, så får jeg denne fejl
Only those fields requested in the first query can be included in an ORDER BY expression.
oRS.Open "SELECT * from qryUNION ORDER BY ID" , oConn, 2, 3
Do While Not oRS.EOF hentSprg=oRS("sprg") hentSvar1=oRS("svar1") hentSvar2=oRS("svar2") hentSvar3=oRS("svar3") hentFakultet=oRS("fakultet") hentStudieretning=oRS("studieretning")
Men det er ligsomom den ikke forstår variablen "randomizer" skal jeg ikke definere den et sted eller hvad? JEg kan også godt se det virker i access når jeg går ind og i de tabeller du har lavet, men hvorfor kan så ikke skrive dem ud?
Helt klart min fejl, så det som en selvfølgelighed at det skulle ud på et website, og var ikke engang klar over at man kunne lave de queries i har lavet direkte i databasen....så noget har jeg da lært. Men det er da ikke spildt arbejde, for sqlen lader til at virke, skal blot lige have defineret den variabel "Randomizer" tror jeg. Under alle omstændigheder er SQL-sproget vel det samme.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.