login  Naam:   Wachtwoord: 
Registreer je!
 Forum

random row uit mysql halen (Opgelost)

Offline UpLink - 24/02/2013 03:03
Avatar van UpLink... Beste leden,

Ik breek mijn hoofd nu toch al meer dan een uur over dit probleem.
Ik probeer via php een random row uit mijn DB te halen, maar dat lukt niet.

Ik heb wel een andere oplossing gevonden, maar die blijkt nogal traag te werken en wat véél meer resources te gebruiken dan die ik probeer.

Ik gebruik volgend stukje code:

  1. $result = mysql_query('SELECT id, bord, uitleg, cat FROM borden') or die('Er is iets fout gelopen.');
  2. $range_result = mysql_query("SELECT MAX(id) AS max_id , MIN(id) AS min_id FROM borden");
  3. $range_row = mysql_fetch_object( $range_result );
  4. $random = mt_rand( $range_row->min_id , $range_row->max_id );
  5. $result_rand = mysql_query( " SELECT * FROM borden WHERE id >= $random LIMIT 0,1 ");
  6.  
  7. echo $result_rand


Het scriptje werkt wel, maar doet niet exact wat het moet doen.
Ik krijg een random resultaat te zien, maar na een refresh van mijn pagina blijft hij telkens hetzelfde resultaat terug geven (namelijk row 6).
Kan iemand mij hierbij helpen?

alvast bedankt

6 antwoorden

Gesponsorde links
Offline vinTage - 24/02/2013 22:21
Avatar van vinTage Nieuw lid
  1. "select id, bord, uitleg, cat from borden where id >= (select floor( max(id) * rand()) from borden ) order by id limit 1"
Bedankt door: UpLink
Offline Martijn - 25/02/2013 17:24
Avatar van Martijn Crew PHP
  1. SELECT id, bord, uitleg, cat FROM borden ORDER BY RAND()
Bedankt door: UpLink
Offline vinTage - 25/02/2013 21:19 (laatste wijziging 25/02/2013 21:20)
Avatar van vinTage Nieuw lid Martijn, ik heb het niet getest qua snelheid (jouw versie leest wel makkelijker )).
Maar bij jouw query moeten alle rijen bekeken worden (om het hoogste id op te halen), terwijl in mijn voorbeeldje er alleen een subquery gedaan wordt naar het hoogste id.

Het zal dus denk ik mede afhankelijk zijn van de grote van de database, wat de snelste manier is imo..
Offline Martijn - 26/02/2013 14:09
Avatar van Martijn Crew PHP Ik geloof dat RAND() heel snel is. Ik weet niet waar ze het op baseren, maar een subquery is ook snel een performance slopertje. Ik gebruik in jewelsite.nl op een paar plekken random (op elke pagina gebeurd het wel) en daar merk ik niets van. Die site is best wel snel, en heeft toch aardig wat regels om door te zoeken steeds
Offline UpLink - 26/02/2013 18:37 (laatste wijziging 27/02/2013 13:57)
Avatar van UpLink ... Of ik doe iets verkeerd of het is iets anders...

Ik heb beide query's gebruikt (van vinTage en Martijn) en ook daar krijg ik telkens hetzelfde ID te zien.

Mijn script retourneerde me telkens Resource id #6

De 2 andere geven me beiden Resource id #4

Ik dacht eerst dat het aan mijn browser lag (Chrome) maar ook IE geeft net hetzelfde resultaat terug als in Chrome...
Ik weet ook niet of het ligt aan het feit dat er 1 rij gewist is uit de database (rij 37 staat er namelijk niet meer tussen, en er zijn in totaal 90 rijen als je de 37 er nog mee bijtelt).

Iemand een ideetje?

//EDIT:
My bad... beetje dom om de resultaten niet in een tabel ofzo weer te geven... werkte perfect...
Offline Martijn - 27/02/2013 14:37
Avatar van Martijn Crew PHP Je hebt nog geen fetch gedaan ;) En een handige tip: PHP geeft nooit (mogelijk 1x op miljoen vanwege een gekke onwaarschijnlijke reden) een resultaat wat verschilt in browsers. Het is serverside, elke browser krijgt exact dezelfde code
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.18s