Avatar billede nikolajdu Nybegynder
08. august 2003 - 23:23 Der er 10 kommentarer og
1 løsning

Kom så rand()

Hey hey. (bah må ikke skrive RAND() med store bogstaver i overskriften.... Random != rand() må jeg heller ikke... suk)

Jeg har lidt problemer med RAND() i mysql.

Jeg har læst at der ER problemer og at man skal sætte parameter på men endnu ikke fundet en holdbar løsning. Hvad gør jeg?

Har prøvet med RAND(NOW()) og det dutter ligeså meget hat.

Jeg kører mySql 3.23.49.

/Nikolaj
Avatar billede ahv Nybegynder
08. august 2003 - 23:25 #1
En tricky løsning (Mon du skulle kører PHP?)

<?php
$res = mysql_query("SELECT COUNT(*) FROM tabel");
$rows = mysql_result($res,0);
$start = rand(0,($rows-1));
$res = mysql_query("SELECT * FROM tabel LIMIT $start,1);
$row = mysql_fetch_array($res);
echo $row['felt'];
?>
Avatar billede nikolajdu Nybegynder
08. august 2003 - 23:26 #2
Jeg kører PHP men vil det ikke sløve en del at lave den type workarounds...?
Avatar billede arne_v Ekspert
08. august 2003 - 23:28 #3
Hvilket problem ?
Avatar billede nikolajdu Nybegynder
08. august 2003 - 23:29 #4
Problemet er at de mildest talt har fået en blødning  mens de lavede nye versioner af mySql. RAND() funker nemlig ikke...
Avatar billede ahv Nybegynder
08. august 2003 - 23:31 #5
en virker ikke optimalt i nogle versioner, mener faktisk 3.23 er en af dem, folk der har disse versioner også som har oprette spm. på Exp omkring det har måtte tage til takke med den postede workaround.
Avatar billede nikolajdu Nybegynder
08. august 2003 - 23:33 #6
Sgu da møg irriterende at skulle lave dobbelt udtræk. I forvejen har jeg næsten 20 forskellige udtræk afhængigt at indholdet.

Nå men på med vanten... :))
Avatar billede phpwiz Nybegynder
08. august 2003 - 23:34 #7
SELECT * FROM table ORDER BY RAND() LIMIT 1;

eller måske :

SELECT * FRO Mtable ORDER BY RAND(NOW()) LIMIT 1;
Avatar billede nikolajdu Nybegynder
08. august 2003 - 23:36 #8
ramlev er prøvet i stor stil :((
Avatar billede nicklasb Nybegynder
08. august 2003 - 23:42 #9
har haft samme problem, og blev også nød til at digte en løsning ligende ahv's.. ( http://www.eksperten.dk/spm/319701 )
tror desværre ikke der er andet at gøre end at vente på en opdatering, eller en ny version..
Avatar billede nikolajdu Nybegynder
08. august 2003 - 23:44 #10
Problemet er egenligt ikke at hente en ny version. Problemet er at webhotellet også skal gøre det :((
Avatar billede limemedia Nybegynder
09. august 2003 - 05:42 #11
nikolajdu >> en "ORDER BY RAND()" vil bede mysql om at tildele en random værdi mellem 0 og 1 til alle poster i resultatet, og så sortere derefter. Med en lille database, vil dette ikke give problemer, men blot med relativt få data, vil det udgøre et performance problem.

En model som ahv skitserer, med to rendyrkede selects uden ekstra "omkostninger" vil i enden give mysql mindre arbejde og derfor levere resultatet hurtigere.

Jeg rettede løsningen lidt til, for at vride de sidste små performance ting ud af den *utestet*

<?php
    $sql = mysql_query("SELECT COUNT(id) FROM tabel");
    $max = mysql_result($sql,0);
    mysql_free_result($sql);

    $index = mt_rand(0, $max-1);

    $sql = mysql_query("SELECT feltnavne FROM tabel LIMIT $index,1);
    $foo = mysql_fetch_assoc($res);
    mysql_free_result($sql);

    echo "<pre>";
    print_r($foo);
    echo "</pre>";
?>

/ LJ
PS. Siden hvornår er E. blevet så sart, man end ikke må formulere sine overskrifter som man vil *suk*
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
Computerworld tilbyder specialiserede kurser i database-management

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