24. marts 2005 - 13:32Der er
13 kommentarer og 1 løsning
ASP/MySQL - Problem med random udtræk
Hej,
Jeg har en problemstilling som jeg ikke umiddelbart kan se løsningen på..Jeg er sikker på at den er der - Jeg skal bare bruge lidt hjælp fra jer..
Info om funktionen: Der skal udvælges en random url i en tabel.. Tabellen hedder "trades" og det felt der skal udvælges hedder returnurl.. Dette klares med:
SQL1:SELECT * FROM trades ORDER BY RAND() - Brugeren redirectes så til returnurl
Dog har jeg også en tabel der holder styr på hvilke returnurl's brugeren allerede har set - Den hedder "out" og de relevante felter her hedder visitorid og returnurl..
SQL2: SELECT * FROM out WHERE visitorid = '" & strVisitorID & "' AND returnurl = '" & strReturnURL & "'
Det jeg ønsker er at brugeren aldrig sendes til den samme returnurl 2 gange.. Så jeg forestiller mig at den første SQL skal køres igen og igen indtil SQL2 ikke kan finde en post.. Hvordan gør jeg det??
Jeg vil også meget gerne have at såfremt der ikke eksisterer returnurls i SQL1 som brugeren allerede har set, så får brugeren den besked at alle returnurl's er vist..
På forhånd tak! Og spørg endelig hvis der er noget i er i tvivl om..
sql = "select trades.* from trades where returnurl not in (select returnurl from out where visitorid = '" & strVisitorID & "') order by rand()" Set rs = Conn.Execute(sql) if not rs.EOF then 'redirtect else Response.write "Ikke flere return urls" end if
Nu skriver du mySQL og i ældre versioner af mySQL er IN ikke med så kan man skrive SQL sætningen om:
sql = "select trades.* from trades left join out on trades.returnurl = out.returnurl where out.returnurl is null AND out.visitorid = '" & strVisitorID & "' order by rand()"
Du får lige hele min kode her - det skal siges at out.trader indeholder samme værdi som trades.returnurl:
Set TradeURL = Conn.Execute("select trades.* from trades left join out on trades.returnurl = out.trader where out.trader is null AND out.visitorid = '" & visitorid & "' order by rand()") if NOT TradeURL.EOF then
'set TradeURL = Conn.Execute("SELECT * FROM trades WHERE status = 'accepted' AND (hitsin * 2) > hitsout ORDER BY RAND()")
Ok den tager ikke nogle fordi den vil havde visitorid=XZ så prøv at skrive den sådan her så visitorid også kan være lig null.
Set TradeURL = Conn.Execute("select trades.* from trades left join out on trades.returnurl = out.trader where out.trader is null AND (out.visitorid = '" & visitorid & "' or out.visitorid is null) order by rand()")
Jeg glemte en detalje jeg troede jeg selv kunne klare :-) Håber at du vil hjælpe mig med den.. Giver gerne 100p for det..
SQL'en ser sådan ud: Set TradeURL = Conn.Execute("select trades.* from trades left join out on trades.returnurl = out.trader where out.trader is null AND (out.visitorid = '" & visitorid & "' or out.visitorid is null) order by rand()")
Dog vil jeg gerne have følge betingelser med også: trades.status = 'accepted' AND (trades.hitsin * 2) > trades.hitsout - Spørgsmålet er bare hvor i sætningen det skal ind for at fungere..
trades.hitsin og trades.hitsout er to talfelter der holder styr på hvor mange hits jeg har modtaget..
Når det er i trades tabellen bør det kunne sættes ind sådan her:
Set TradeURL = Conn.Execute("select trades.* from trades left join out on trades.returnurl = out.trader where out.trader is null AND (out.visitorid = '" & visitorid & "' or out.visitorid is null) and trades.status = 'accepted' AND (trades.hitsin * 2) > trades.hitsout order by rand()")
Jeg glemte at skrive at det ikke var nødvendigt med ekstra point :) Det er så heller ikke tilladt at give mere end 100 point for et spørgsmål ifølge reglerne :)
Ok - Jamen tak for hjælpen under alle omstændigheder...
Synes godt om
Ny brugerNybegynder
Din løsning...
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.