Oké. Ik zit eens te prutsen met die random functie in MySQL. Ik kom alleen elke keer op hetzelfde probleem.

Voor het proberen dacht ik aan een simpel bannerXchange scriptje. Hiervoor heb ik de volgende query:
<?php
$query = mysql_query("SELECT * FROM bannerXchange WHERE active = '1' ORDER BY RAND() LIMIT 1");
?>

Deze zou goed zijn volgens de documentatie. En dat is die ook. Als ik via SSH op mijn MySQL server inlog en ik doe de query krijg ik netjes random een rij uit de tabel te zien.

Zodra ik echter de query via PHP uitvoer krijg ik elke keer alleen het eerste record te zien. Zodra ik DESC aan de query toevoeg elke keer de laatste: dezelfde fout dus... :S

Imand enig idee waar het aan kan liggen?

Elwin
?? ja dat is inderdaad raar mss een je mysql tabel standaard laten sorteren dat kan helpen
?? ja dat is inderdaad raar mss een je mysql tabel standaard laten sorteren dat kan helpen
en wat gebeurt er als je de WHERE weglaat?
DESC toevoegen? Waarom zou je dat willen, je sorteerd bij iets willekeurigs, dat wil je dat toch daarna niet oplopend of aflopens sorteren?

Grtz,

Arend
?? ja dat is inderdaad raar mss een je mysql tabel standaard laten sorteren dat kan helpen

Waarop zou het standaard gesorteerd moeten worden? Hij staat nu gesorteerd op id (auto_increment).

en wat gebeurt er als je de WHERE weglaat?

Hetzelfde, elke keer de eerste record.

DESC toevoegen? Waarom zou je dat willen, je sorteerd bij iets willekeurigs, dat wil je dat toch daarna niet oplopend of aflopens sorteren?

Weet ik, maar men gaat proberen hè? En ik deed dat eigenlijk ook om te kijken of ik dan elke keer de laatste record zou krijgen.

Mijns inziens ligt het niet aan de MySQL server, want in de console werkt het wel. Ligt het dan aan PHP? Via mijn script werkt het niet en als ik mijn query uitvoer via PHPMyAdmin krijg ik ook elke keer alleen de eerste record...

Elwin
weird sjitz :/ misschien dat je perongelijk een verkeerde database selecteerd dan waar je op inlogd via ssh?? of haal je het uit een verkeerde tabel!? dat zou nog best wel logies voor een probleem wezen :o)
hoeveel resultaten (en belangrijker welke) resultaten krijg je als je die limit weghaalt
ik kan me namelijk niet voorstellen dat het niet werkt
misschien dat je perongelijk een verkeerde database selecteerd dan waar je op inlogd via ssh?? of haal je het uit een verkeerde tabel!?

Nee, want ik haal de eerste wel op via PHP...

hoeveel resultaten (en belangrijker welke) resultaten krijg je als je die limit weghaalt

Ik krijg dan alle rijen te zien die in de tabel aanwezig zijn (even gedaan via PHPMyAdmin).

Elwin

Goed. Ik ga het even een stukje moeilijker maken.. :D

Ik heb het op een andere webserver geprobeerd. Daar lukte het wel. Hierdoor zou je zeggen dat het ...
- ... script goed is.
- ... aan de webserver moet liggen.

Dan dus een vergelijking tussen de servers.
Server 1 (werkt niet):
Apache: 2.0.40
MySQL: 3.23.54
PHP: 4.2.2

Server 2 (werkt wel):
Apache: 1.3.26
MySQL: 4.0.17
PHP: 4.3.4

Mooi allemaal verschillende nummertjes (versies) dus! Dus dan ga je afstrepen:
- Direct in de database op server 1 werkt, dus MySQL moet goed zijn (volgens de documentatie is die dat ook aangezien het op MySQL > 3.23 moet werken).

Het moet dus aan PHP of Apache op server 1 liggen. Het lijkt me ook geen Apache probleem omdat die eigenlijk er niets mee te maken heeft en op een lagere versie (server 2) ook netjes het goede doet.

"Dus..," denk ik dan. En de rest denkt ook vast en zeker PHP. Om dat nu te onderzoeken heb ik op server 2 het script gezet, maar dan met een MySQL-connectie naar server 1.

En wat gebeurt er: ik krijg weer elke keer dezelfde record uit de DB.

Vaag.

Iemand enig idee wat het probleem is? :D

Elwin
Ik heb nu een work-around gemaakt door het aantal rijen te tellen (count(*)) en dan de random-functie van PHP te gebruiken. Mooi is het niet, maar het werkt wel...

<?php
$count = mysql_fetch_row(mysql_query("SELECT count(*) FROM bannerXchange WHERE actief = '1'");
$random = rand(1,$count[0]);
$query = mysql_query("SELECT * FROM bannerXchange WHERE id = '$random'"); // Om uiteindelijk de random banner op te halen...
?>

Elwin

Reageren