Avatar billede mpj_86 Nybegynder
29. juli 2006 - 13:20 Der er 15 kommentarer og
2 løsninger

RAND() på MySQL giver problemer med?

Hej

Jeg bruger ORDER BY RAND() for at den skal vise id'erene i forskelige rækkefølge.
Jeg deler dem også op i sider, så når man går f.eks på side 2 så blander den dem igen, og derved så viser den nogle gange de samme igen.

Hvordan laver man det problem?
Avatar billede showsource Seniormester
29. juli 2006 - 13:38 #1
Altså hvis det er vist, skal det ikke vises igen?
Avatar billede mpj_86 Nybegynder
29. juli 2006 - 13:39 #2
Ja
Avatar billede mpj_86 Nybegynder
29. juli 2006 - 13:40 #3
Den må ikke vise det samme id på den næste side..
Avatar billede showsource Seniormester
29. juli 2006 - 13:43 #4
Du kan bruge sessions, til at registrere viste id.
Hvis id'et gerne må vises igen, bare ikke på næste side:

SELECT `id` FROM `db` WHERE `id` != ". intval($_SESSION["vist"]) ORDER BY RAND()

utestet!
Avatar billede showsource Seniormester
29. juli 2006 - 13:46 #5
Hvis viste id'er ikke skal komme igen, kan du gemme dem i et array med sessions
SELECT `id` FROM `db` WHERE `id` !IN ('". implode("," $_SESSION["vist"][]) ."')

stadig utestet, sidder ude i byen......
Avatar billede mpj_86 Nybegynder
29. juli 2006 - 14:45 #6
Jeg har ikke prøvet det endnu.
Men hvad så hvis du er på den sidste side, og så gerne vil se side 2 igen, så vil den jo ikke vise noget?
Avatar billede showsource Seniormester
29. juli 2006 - 20:04 #7
Ikke hvis man kun må se siden en gang.
Hvis det kun er for at næste side ikke kan være, (som et link), så er det første ex. som skal bruges.
Avatar billede mpj_86 Nybegynder
29. juli 2006 - 20:16 #8
Problemet er at hvis du f.eks har delt dem op på 3 sider, så når du har set alle siderne og så vil se side 1 igen, så vil den jo ikke udskrive nogle, da alle id'erne så står i $_SESSION["vist"][]
Avatar billede showsource Seniormester
29. juli 2006 - 20:25 #9
Nu er jeg ikke helt med, vil du lave en random, og sørge for at aktuelle side IKKE er at finde i den random? Men ellers alle andre?
Avatar billede mpj_86 Nybegynder
29. juli 2006 - 20:33 #10
Nej.

Det er denne salgsliste jeg snakker: http://www.soelvmosegaard.dk/index.php?s=salgsliste&r=0&pris=0&kon=0

Der kan du se at de er delt op i 3 sider, hvis du så går over på side 2 så kan den godt finde på at 1 eller flere af dem også er vist på side 1.

Man kan godt bruge $_SESSION["vist"][] men så hvis du har set alle siderne så kan du jo ikke se side 1 igen da $_SESSION["vist"][] indeholder alle id'erne
Avatar billede showsource Seniormester
29. juli 2006 - 20:36 #11
Ahh, nu har jeg ikke kikket siden igennem, men du mener at samme hest ikke må være på flere sider?
Avatar billede mpj_86 Nybegynder
29. juli 2006 - 20:39 #12
Ja..
Avatar billede pidgeot Nybegynder
29. juli 2006 - 20:40 #13
Løsningen må være at hente alle ID'erne ud i rækkefølge i en session variabel når du laver søgningen med ORDER BY RAND(), og dernæst beregne det med sidetal og hente hver enkelt hest ud fra de data. Det er ikke ret smart, men det bør virke.

Overvej dog om det virkelig er nødvendigt at have den tilfældige sortering, det er trods alt en del ekstra arbejde du skal ud i.
Avatar billede showsource Seniormester
29. juli 2006 - 20:46 #14
Nu tror jeg at fik den! :O)

som pidgeot, undlad at lave rand på siderne, folk kan jo ikke sende et link til en bekendt!
Giv hellere muliged for at sortere efter pris, navn, alder m.m.
Avatar billede mpj_86 Nybegynder
29. juli 2006 - 21:00 #15
Tak for hjælpen..

smid i et svar begge.
Avatar billede showsource Seniormester
29. juli 2006 - 21:05 #16
ok! :O)
Avatar billede pidgeot Nybegynder
29. juli 2006 - 21:32 #17
Værsgo :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester