Avatar billede miyagidk Nybegynder
11. maj 2003 - 11:51 Der er 14 kommentarer og
2 løsninger

Kan ikke få RAND() til at virke!

Jeg har et problem med RAND(),
den viser kun det samme id fra min tabel!
Jeg har prøvet mig lidt frem men kan ikke få det til spille!

Her er sql koden:

$query = mysql_query("select *,((id*1)+rand()) as random from citat order by random limit 1") or die(mysql_error());

while($row = mysql_fetch_array($query)){
      echo "<font>";
      echo nl2br($row[citat])."<br>";
      echo "$row[forfatter]";
      echo "</font>";
      echo "<br>";
Avatar billede ahv Nybegynder
11. maj 2003 - 11:55 #1
Prøv; SELECT * FROM citat ORDER BY RAND() LIMIT 1
Avatar billede miyagidk Nybegynder
11. maj 2003 - 12:05 #2
Det gir samme resultat!
Avatar billede ahv Nybegynder
11. maj 2003 - 12:11 #3
$query = mysql_query("SELECT * FROM citat ORDER BY RAND() LIMIT 1");
$row = mysql_fetch_array($query);
echo "<font>";
echo nl2br($row[citat])."<br/>";
echo "$row[forfatter]";
echo "</font>";
echo "<br/>";

burde virke.
Avatar billede morw Nybegynder
11. maj 2003 - 12:22 #4
Har oplevet at nogle versioner af mysql ikke virker med rand()
Avatar billede ahv Nybegynder
11. maj 2003 - 12:27 #5
Så vidt jeg har læst kon rand fra version 3.23 Så har du en ældre end denne har du svaret på dit problem.
Avatar billede miyagidk Nybegynder
11. maj 2003 - 13:14 #6
ahv --> dit query gir fejl :
Parse error: parse error, unexpected '}' in /usr/local/www/subdomaindk/03/citat/index.php on line 25

det er forresten mysql V. 3.23.55
Avatar billede ahv Nybegynder
11. maj 2003 - 13:16 #7
miyagidk >> Du skal skal bare fjerne den } på linie 25, den kommer af at jeg tog { fra din while sætning.
Avatar billede ahv Nybegynder
11. maj 2003 - 13:17 #8
eller hov, det kan selvfølgelig være en højere oppe du skal fjerne, det skal være den som hørte til din while
Avatar billede ahv Nybegynder
11. maj 2003 - 13:18 #9
Her har de problemer med rand i version;
3.23.54 & 2.23.55
http://www.eksperten.dk/spm/311518
Avatar billede ahv Nybegynder
11. maj 2003 - 13:22 #10
Måske jeg skulle have sovet lidt længere, versionerne er selvfølgelig;
3.23.54 & 3.23.55
Avatar billede miyagidk Nybegynder
11. maj 2003 - 13:34 #11
hmm, er der så en måde med php man kan komme uden om problemet?
Avatar billede morw Nybegynder
11. maj 2003 - 13:56 #12
I ren php ville du gøre noget alá:

mysql_query("Select * FROM citat");

antal fra mysql_num_rows();

Lav et rand nummer mellem 1 og antal

mysql_data_seek($result, $randnr);

mysql_fetch_array()
Avatar billede tipsen Nybegynder
12. maj 2003 - 01:20 #13
Der er også lidt diskussion samt tilhørende løsning her:

      http://www.eksperten.dk/spm/351205
Avatar billede biopv Nybegynder
12. maj 2003 - 09:35 #14
Hej,

Problemet opstår hvis du kalder mysql med en ny connection gennem php igen og igen... Den vil altid returnere samme random value... Derfor skal du bruge et seed til din rand)= function - f.eks tiden i sekunder...

Så brug rand(unix_timestamp()) - så skulle du være ude over ptoblemet - uanset mysql version...


SELECT * FROM citat ORDER BY RAND(UNIX_TIMESTAMP) LIMIT 1;

P.
Avatar billede miyagidk Nybegynder
12. maj 2003 - 09:59 #15
Jeg siger mange tak for alle svarne, jeg har kunne bruge det hele!
Er blevet en del klogere på RAND() funktionen!

Jeg fordeler point imellem dem som har svaret!
Hvis i som ikke har oprettet svar vil have lidt point så sig til!

Takker :)
Avatar billede tipsen Nybegynder
12. maj 2003 - 10:44 #16
Vær også opmærksom på, hvilke versioner af MySQL det drejer sig om!
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