webForumDet fria alternativet

dela kolumn1 på kolumn2 och slumpa ut allt som överstiger 50%

Databaser & SQL

13 svar · 390 visningar · startad av Danielkun

Medlem sedan maj 2003361 inlägg
Frågan#1

Jag har en Accessdatabas med ID nummer jag vill slumpa fram, men bara ID nummer som överstiger 50% av kolumn1 delat på kolumn2.

Går det att göra detta direkt i SQL frågan?

Kolumnerna innehåller bara heltal.

Medlem sedan juni 200032 967 inlägg
#2

Mja, nästan. Access har lite "trubbel" med slumpning, så vi får hjälpa till på traven. Hjälpen ger vi med asp-kod, men det går såklart att använda vilket språk man vill.

Eftersom jag inte använder access så är följande dock bara en gissning:

Randomize()
intRnd = -1*(Int (1000*Rnd)+1)
strSQL = "SELECT ID, fld1, fld2, RND(" & intRnd & "*ID) FROM tbl WHERE ID > 0.5*(fld1/fld2) ORDER BY 4"

Som sagt, otestad gissning bara.

Mvh

Medlem sedan maj 2003361 inlägg
#3

Tack för svaret! :e

Jag förstår inte riktigt varför ID är efter WHERE.

Jag kanske felformulerade mig lite. Jag har 2 kolumner (Som jag kallar "Shown" och "Correct") och jag vill dela Shown på Correct och om resultatet av det blir över 50% så vill jag slumpa bland dom ID nummrerna. (Det är en loop)

Nu använder jag detta för att slumpa ut talen och jag tycker den funkar ganska bra, men jag ska testa den du skrev med. Jag hade rejält med problem med slumpen..

Randomize 
R=clng(1E6*rnd)

strSQL = "SELECT ID, Typ, Datum, Shown, Correct FROM words WHERE Addedby = 'Danielkun' ORDER BY rnd(-(1000*ID)* " & R & ")"

Jag testade att köra detta men jag får varken ut det jag vill eller nått fel

strSQL = "SELECT ID, Typ, Datum, Shown, Correct FROM words WHERE Addedby = 'Danielkun' AND ((Correct/Shown)*100) > 50 ORDER BY rnd(-(1000*ID)* " & R & ")"

Tack!!!!!! :D

Medlem sedan juni 200032 967 inlägg
#4

Jag förstår inte riktigt varför ID är efter WHERE.

Tja, du sa ju att ID-numren skulle vara större än 50% av kolumn1 delat med kolumn 2. Som man frågar får man svar!

Jag förstår inte vad du vill ställa för villkor. Ska kolumn1 vara minst 50% av kolumn2? Ska kolumn1 vara 50% större än kolumn2?

Medlem sedan maj 2003361 inlägg
#5

:r

Jag har byggt en språktest som slumpar bland ord. Om man skriver in den rätta översättningen för ordet så plussas det på med 1 i "shown" och "correct" för just det ordet.

Men om man inte skriver in rätt ord så plussas det bara på med 1 i "shown"

Nu vill jag göra så att man kan välja att bara slumpa bland de lätta orden. dvs dom orden som man tidigare klarat av mer än 50%

Jag vill endast slumpa bland:
if Round((Correct/Shown)*100) >= 50 then

:e hoppas jag föklarade mig lättare

Medlem sedan juni 200032 967 inlägg
#6

Något sånt här då?

Randomize()
intRnd = -1*(Int (1000*Rnd)+1)
strSQL = "SELECT ID, Typ, Datum, Shown, Correct FROM words WHERE (shown/correct > 0.5) ORDER BY RND(" & intRnd & "*ID)"
Medlem sedan maj 2003361 inlägg
#7

Du är ju snabbare än stormen.. ska testa !! :)

Medlem sedan maj 2003361 inlägg
#8

Jo, det funkar perfekt!

Jag fick ändra (shown/correct) till (correct/shown).
Sen får jag "Spill" fel om shown = 0, men jag får se till att lägga in en 1'a när jag sparar ner ordet så är det löst!

Tack för hjälpen!!!!!!!!!! :)

/RED. JAg bara undrar men slumpar SQL först och sen räknar ut talet eller räknar den ut alla tal först och sen slumpar?

Medlem sedan juni 200032 967 inlägg
#9

Självklart ska det vara correct/shown, det var bara jag som klantade mig lite.

Jag tycker inte att du ska spara en etta när du lagrar ordet, för det stämmer ju inte. Hur ska det hanteras när ordet inte har visats? Ska det hämtas ut med denna fråga?

Medlem sedan maj 2003361 inlägg
#10

Nu skrev jag lite extra på inlägget ovan..

Fast om jag har 0 så får jag ju fel i SQL satsen, så jag minskar shown med 1 när jag laddar ur databasen istället. Då visas det ju rätt på sidan men databasen kommer att ha 1 för mycket.

Dom här talen är bara till för extra information om just det ordet så jag har inga andra funktioner baserade på dem

Medlem sedan juni 200032 967 inlägg
#11

Jag tycker att:

* Det är fel att lagra tal som inte stämmer
* Det är rätt att korrigera SQL-frågan så den tar hänsyn till noll.

Fast det är ju bara vad jag tycker. ;-)

Medlem sedan maj 2003361 inlägg
#12

Du hade rätt @nders. Det blev faktist mer strul än jag tänkt mig :(

SQL satsen ger andra procent värden av vad det igentligen är så resultaten blir fel. Hur skulle man gå till väga om man vill få SQL frågan att klara en nolla i Shown fältet?

Eftersom ordet aldrig visats så ska det ge resultatet 0

Medlem sedan juni 200032 967 inlägg
#13

Hur skulle man gå till väga om man vill få SQL frågan att klara en nolla i Shown fältet?

Det enklaste är ju att lägga till ett villkor.

strSQL = "SELECT ID, Typ, Datum, Shown, Correct FROM words WHERE shown > 0 AND (correct/shown > 0.5) ORDER BY RND(" & intRnd & "*ID)"

Då kommer inte nya ord med i resultatsetet.

Medlem sedan maj 2003361 inlägg
#14

funkar perfekt! tack!!

810 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
683 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)