[php/mysql] random gegevens uit database halen

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

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
$query = "SELECT * FROM plep WHERE status='1' ORDER BY RAND()";

in hoeverre is dit nou echt random, want het lijkt niet echt random als je op f5 blijft rammen...

Acties:
  • 0 Henk 'm!

  • Hagar
  • Registratie: Februari 2001
  • Laatst online: 20-03 20:39

Hagar

Diabootic

Uit de mysql docs:
RAND() is not meant to be a perfect random generator, but instead a fast way to generate ad hoc random numbers that will be portable between platforms for the same MySQL version.

Nu ook zonder stropdas


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mmz ik kan alleen zo 1,2 3 geen betere manier verzinnen..

Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Kan je niet met PHP een random nummer genereren en dan WHERE id='$randomgetal' of iets dergelijks?

Acties:
  • 0 Henk 'm!

  • bouvrie
  • Registratie: Augustus 2002
  • Laatst online: 21-05 11:17

bouvrie

Interior demolisher

01010100011010000110010100100000010011110100111001000101001000000011101000101001


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Blaise schreef op dinsdag 25 januari 2005 @ 00:48:
Kan je niet met PHP een random nummer genereren en dan WHERE id='$randomgetal' of iets dergelijks?
mwah handig is anders,
omdat niet elke record goed is
dus dan zou je de records die goed zijn moeten inlezen in een array, daar er 1 uit kiezen met een random getal en dan dat record weer uit de database moeten halen..

Acties:
  • 0 Henk 'm!

  • Hagar
  • Registratie: Februari 2001
  • Laatst online: 20-03 20:39

Hagar

Diabootic

SELECT *, MD5( RAND( )*NOW() ) AS myRandom FROM table ORDER BY myRandom LIMIT 0, 1

Dit zal het iets meer `random` maken maar is wel cpu intensiever

Nu ook zonder stropdas


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 25 januari 2005 @ 00:53:
mwah handig is anders,
omdat niet elke record goed is
dus dan zou je de records die goed zijn moeten inlezen in een array, daar er 1 uit kiezen met een random getal en dan dat record weer uit de database moeten halen..
Het kan eenvoudiger:
PHP:
1
2
3
4
5
6
7
8
9
10
$max = mysql_result(mysql_query("SELECT MAX(id) FROM tabel"), 0);
$id = rand(1, $max);
$query = mysql_query("SELECT * FROM tabel WHERE id <= ".$id " LIMIT 1");
if (!($data = mysql_fetch_object($query))) {
  $query = mysql_query("SELECT * FROM tabel WHERE id > ".$id " LIMIT 1");
  if (!($data = mysql_fetch_object($query))) {
    die("Lege tabel!");
  }
}
// vanaf hier kun je met $data werken

Toch zou ik, als ik jou was, liever met MySQL's RAND functie werken. Die is random genoeg. Ik snap ook niet echt wat je hiermee bedoelt:
in hoeverre is dit nou echt random, want het lijkt niet echt random als je op f5 blijft rammen...
De waarde zou hier toch wel degelijk moeten veranderen (dat doet ie bij mij in ieder geval altijd). Misschien zit het ergens anders in je code fout? Of misschien zit de cache van je browser in de weg? Probeer eens een ctrl+f5. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
-NMe- schreef op dinsdag 25 januari 2005 @ 01:22:
[...]

Het kan eenvoudiger:
PHP:
1
2
3
4
5
6
7
8
9
10
$max = mysql_result(mysql_query("SELECT MAX(id) FROM tabel"), 0);
$id = rand(1, $max);
$query = mysql_query("SELECT * FROM tabel WHERE id <= ".$id " LIMIT 1");
if (!($data = mysql_fetch_object($query))) {
  $query = mysql_query("SELECT * FROM tabel WHERE id > ".$id " LIMIT 1");
  if (!($data = mysql_fetch_object($query))) {
    die("Lege tabel!");
  }
}
// vanaf hier kun je met $data werken

Toch zou ik, als ik jou was, liever met MySQL's RAND functie werken. Die is random genoeg. Ik snap ook niet echt wat je hiermee bedoelt:

[...]

De waarde zou hier toch wel degelijk moeten veranderen (dat doet ie bij mij in ieder geval altijd). Misschien zit het ergens anders in je code fout? Of misschien zit de cache van je browser in de weg? Probeer eens een ctrl+f5. :)
ja ok hij doet ook wel random maar het 'lijkt' of sommigen vaker voorkomen..
ik weet niet of het echt zo is, dan zou ik moeten gaan turfen :P

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 25 januari 2005 @ 01:32:
ja ok hij doet ook wel random maar het 'lijkt' of sommigen vaker voorkomen..
ik weet niet of het echt zo is, dan zou ik moeten gaan turfen :P
Ten eerste kan een computer moeilijk echt iets random doen, aangezien die getallen toch ergens vandaan moeten komen. PHP zal dus niet veel mooiere random getallen genereren dan MySQL. Ik zou gewoon de RAND functie van MySQL nemen. Eenvoudig, en in 99% van de gevallen efficiënt genoeg. Bovendien zeg je het goed: het 'lijkt' dat sommigen vaker voorkomen. Op een ander tijdstip komt misschien een andere vaker voor. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08 14:36
Verwijderd schreef op dinsdag 25 januari 2005 @ 01:32:
[...]

ja ok hij doet ook wel random maar het 'lijkt' of sommigen vaker voorkomen..
ik weet niet of het echt zo is, dan zou ik moeten gaan turfen :P
Dat lijkt niet alleen zo, dat is echt zo.

Als je de id's 6, 7, 8, 9, en 10 hebt, dan krijg je id=6 in de helft van de gevallen.
Alleen als geen gaten in de id reeks zit dan krijg je een eerlijke verdeling.

| Toen / Nu

Pagina: 1