Random nummering in MYSQL
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
}
?>
$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?
Je moet nog een WHERE id= toevoegen aan je UPDATE query. Ofja, in ieder geval een WHERE clausule.
:-) je verandert nu dus voor alle rijen de kolom "volgorde"
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.
Gewijzigd op 01/01/1970 01:00:00 door Marlies Maalderink
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.
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 -
En? Is dit al gelukt?
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?
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.
Heel erg bedankt!