jeg havde på et tidspunkt selv behov for noget lignende... Een mulighed er følgende:
hvis du har en tabel med 1000 poster, så finder du et tilfældigt tal mellem 1 og 1000.
Så kan du sige select * from tabel limit (X,1)
hvor x er dit tilfældige tal.
Det er dog ikke særlig optimalt - en anden måde, hvis du har en ID tilknyttet alle poster (ellers kan du evt. oprette en - du bliver glad for den i længden ;-) find it tilfældige tal og sig
mysql> select *, rand() as r from domains order by r limit 1; +-------+--------------+-------+---------+---------+----------------------+ | ID | name | check | Created | Deleted | r | +-------+--------------+-------+---------+---------+----------------------+ | 18060 | aofherlev.dk | 1 | NULL | NULL | 4.16021794468185e-06 | +-------+--------------+-------+---------+---------+----------------------+ 1 row in set (27.11 sec)
mysql> select * from domains limit 150000,1; +--------+------------+-------+---------+---------+ | ID | name | check | Created | Deleted | +--------+------------+-------+---------+---------+ | 150001 | jyderne.dk | 1 | NULL | NULL | +--------+------------+-------+---------+---------+ 1 row in set (1.34 sec)
Den med rand() er lidt mere fleksibel, da den f.eks. kan vægtes med hvor mange gange et billede har været vist. Fx. skal 2 billeder vises 1000 gange, det ene er blevet vist 800 gange det andet 200. Så kan man med lidt aritmetik beregne det således at det andet billede blive vist lidt oftere end det første, så deres visninger udjævnes.
Ganske rigtigt, men der skal aligevel være MANGE huller før det bedre kan betale sig at bruge rand() end at blive ved med at forsøge til man får fat i en eksisterende post.
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.