Random nummering in MYSQL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marlies Maalderink

Marlies Maalderink

30/10/2007 16:38:00
Quote Anchor link
Ik ben bezig met een simpele zoekmachine die de zoekresultaten op meerdere pagina's weergeeft, maar wel random. SORT BY RAND() kan ik hiervoor niet gebruiken, omdat de resultaten dan verwisselen op iedere pagina en dus niet uniek zijn binnen die zoekopdracht.

Het makkelijkste lijkt mij om in de database een extra veld te te voegen waar random getallen in komen te staan. Vervolgens kan ik op die getallen sorteren. Verder kan ik dan met een simpel phpscriptje deze getallen iedere dag updaten zodat de resultaten uiteindelijk iedere dag anders worden gepresenteerd.

Dit php scriptje ziet er nu zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$getal
= mt_rand(0,100000);

if ($_POST["knop"]) {

mysql_query("UPDATE Filmpjes SET Volgorde='$getal'");
}
else {
?>

<form method="post" action="<?php echo $PHP_SELF ?>">
<input type="submit" name="knop" value="ga!">
</form>
<?php
}

?>


Het probleem is dat er nu wel een random getal in de database wordt gezet, maar dat dit getal vervolgens voor alle rijen het zelfde is. En dat moet juist niet.

Weet iemand hoe ik er voor kan zorgen dat er voor iedere rij een ander random getal komt te staan?
 
PHP hulp

PHP hulp

22/12/2024 22:45:55
 
GaMer B

GaMer B

30/10/2007 16:40:00
Quote Anchor link
Je moet nog een WHERE id= toevoegen aan je UPDATE query. Ofja, in ieder geval een WHERE clausule.
 
Hylke

Hylke

30/10/2007 16:43:00
Quote Anchor link
:-) je verandert nu dus voor alle rijen de kolom "volgorde"
 
GaMer B

GaMer B

30/10/2007 16:45:00
Quote Anchor link
Inderdaad, je zult dus een while/for/foreach of wat dan ook voor een loop moeten gebruiken en door blijven loopen totdat het einde van de tabel is bereikt. En voor elke insert verander je de id (of andere kolom die uniek is) in je UPDATE query.
 
Marlies Maalderink

Marlies Maalderink

30/10/2007 16:45:00
Quote Anchor link
Oké, dank je wel! Daar kan ik wat mee.
Gewijzigd op 01/01/1970 01:00:00 door Marlies Maalderink
 
Frank -

Frank -

30/10/2007 16:46:00
Quote Anchor link
RAND() levert een FLOAT op, dus een getal. Vervolgens wordt er op dit getal gesorteerd. Jij kunt dus ook zelf een getal opgeven, bv. 0.71756997398806

SELECT * FROM tabelnaam ORDER BY 0.71756997398806 LIMIT 0, 10

Dit getal zet je in een sessie of in de url (dat heeft de voorkeur) en kun je dus iedere keer opnieuw gebruiken. Zo maak je een vaste random sortering aan en kun je eenvoudig door alle resultaten lopen zonder iedere keer opnieuw te gaan sorteren.

Door dit getal in de url te zetten, kun je ook de sortering bookmarken, samen met het paginanummer. Zo kan een bezoeker dus eenvoudig de data weer terugvinden of delen met anderen. Tip: Zet alleen de waarde achter de 0 in de url, die 0. plak je er in je query wel voor.

Succes!

Edit: Dit is dus een oplossing voor het oorspronkelijke probleem, niet voor jouw lapmiddel! Die UPDATE-query e.d. kun je dus weggooien.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Frank -

Frank -

30/10/2007 17:56:00
Quote Anchor link
En? Is dit al gelukt?
 
Marlies Maalderink

Marlies Maalderink

30/10/2007 18:04:00
Quote Anchor link
Nog niet, maar misschien begrijp ik hem niet helemaal.

Als ik dit gebruik:
SELECT * FROM tabelnaam ORDER BY 0.71756997398806 LIMIT 0, 10

komen de resultaten in een bepaalde volgorde. Maar als ik een heel ander getal gebruik komen de resultaten nog steeds in diezelfde volgorde. Klopt dat? En zo niet, waarom veranderd de volgorde van de resultaten dan niet als ik het getal verander?
 
Frank -

Frank -

30/10/2007 18:42:00
Quote Anchor link
Foutje van mijn kant, het mag worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM tabelnaam ORDER BY RAND(0.71756997398806) LIMIT 0, 10

Je moet het getal dus als input opgeven voor de functie RAND(). Wanneer je hier een ander getal instopt, krijg je een andere vaste sortering. Getest en goedgekeurd!

Domme fout... Die maak ik ook nog wel eens.
 
Marlies Maalderink

Marlies Maalderink

30/10/2007 19:18:00
Quote Anchor link
Perfect, nu werkt het wel!

Heel erg bedankt!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.