[php/mysql] Random

Pagina: 1
Acties:
  • 126 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de search gebruikt, maar kan het eigenlijk niet vinden.
Misschien maak ik ook wel een domme fout ofzo. Ben nog maar een beginner.

Ik heb de volgende query:

$query = "SELECT * FROM gebruikers ORDER BY RAND() LIMIT 1";
$result = mysql_query($query);

Als ik deze output, krijg ik altijd hetzelfde record te zien, terwijl het toch een random functie is niet?

Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 18-09 19:05
ORDER BY RAND() :?
Je wilt dus ordenen op een random nummer, niet op een kolomnaam? Ik denk dat je ORDER BY veldnaam = RAND() bedoelt ;)


Ok, dat mag dus wel (in versie 3.23) :/
Volgens mij doe je iets anders verkeerd dan. Check ook ff de MySQL manual (search naar 'rand()').

[ Voor 45% gewijzigd door Postman op 22-02-2003 14:05 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat ik bedoel is dit.
In de tabel gebruikers zitten op dit moment 3 records.
Nu wil ik 1 van deze op het scherm tonen. Maar wel op een random manier. dus 33,3% kans op record 1/2/3.

Dit is mij niet gelukt, en Order by veldnaam ... is ook niet de oplossing.

Acties:
  • 0 Henk 'm!

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
misschien een random nummer pakken van 0-3 en dan WHERE id = dat nummer?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat is misschien nog wel de beste oplossing ja

Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 18-09 19:05
Je functie werkt wel, maar omdat je limit 1 erbij hebt staan zie je niet dat het random is. Je kunt dus best wel lang w88 (of ook niet) totdat je een keer een andere waarde ziet.

nikao: sterker nog: het is de enigste oplossing!

Acties:
  • 0 Henk 'm!

  • KorZijl
  • Registratie: December 2002
  • Laatst online: 30-11-2021

KorZijl

errare humanum est


Acties:
  • 0 Henk 'm!

Verwijderd

Ik ken het probleem. Wanneer je je order by rand() in MySQL zelf intikt doet ie het goed, maar wanneer letterlijk dezelfde query maakt in php komt er steeds hetzelfde uit. Probleem speelt zich bij mij af met php 4.2.3. Hier is een work-around.
PHP:
1
2
3
4
5
6
7
8
    mt_srand ((double) microtime() * 1000000);
    $sqlseed = mt_rand(1, 2000000000);
    $random_result = mysql_query(
        "select * 
        from bla 
        order by rand($sqlseed)
        limit 3"
    , $db);

[ Voor 6% gewijzigd door Verwijderd op 23-02-2003 13:13 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Die laatste doet het uitstekend. Bedankt.

Acties:
  • 0 Henk 'm!

  • Atari Paul
  • Registratie: November 2002
  • Laatst online: 13:04
Een andere mogelijkheid om dit te doen buiten PHP om is:
select * from table order by md5(rand())
Dit is terug te vinden op: http://www.mysql.com/doc/en/Mathematical_functions.html
En ik moet zeggen het werkt vrij goed.

Stability ?? My Atari still has it :)


Acties:
  • 0 Henk 'm!

  • Tirillo
  • Registratie: Januari 2002
  • Niet online

Tirillo

Joker of Unauwen

Verwijderd schreef op 23 February 2003 @ 13:11:
Ik ken het probleem. Wanneer je je order by rand() in MySQL zelf intikt doet ie het goed, maar wanneer letterlijk dezelfde query maakt in php komt er steeds hetzelfde uit. Probleem speelt zich bij mij af met php 4.2.3. Hier is een work-around.
Ik had dit probleem laatst ook.. Ook dat het in MySQL zelf goed werkte, maar in php niet.. Dit is schijnbaar, omdat bij elke nieuwe connectie de eerste waarde die je terugkrijgt altijd dezelfde is..

Het zou dus aan kunnen liggen dat in de while-lus(had de topicstarter het over in een ander topic over ditzelfde onderwerp) elke keer een connectie wordt gemaakt.. In dit geval zou het al helpen alleen voor de while-lus een connectie te maken..

Een andere workaround zou zijn om de query 2x uit te voeren en het 2e resultaat te pakken, dit is wel (een beetje meer) random..

...

Pagina: 1