Hallo ieder,
IK heb een scriptje gemaakt om 5 random waardes uit een database te halen die niet hetzelfde mogen zijn.

<?php

$geweestt = array();
for($i = 1; $i <= 5; $i++)
{
$query = mysql_query("SELECT * FROM tbl_profielen ORDER BY RAND() LIMIT 0,1") or die("fout1");
$cijfer = rand(1, mysql_num_rows($query));

while ($obj = mysql_fetch_object($query))
{
if(in_array($cijfer, $geweestt))
{
$i--;
}
else
{
$geweestt[] = $cijfer;

$query4 = mysql_query("SELECT * FROM tbl_afbeelding WHERE afbeelding_id=".$obj->pasfoto_id."");

while ($obj4 = mysql_fetch_object($query4))
{
echo"tothier";
echo"<a href=\"profielen.php?profiel_id=".$obj->profiel_id."\"><img src=".$obj4->locatie." border=0 title=\"".$obj->naam."\" alt=\"".$obj->naam."\" height=45></a>";
echo"&nbsp;&nbsp;&nbsp;&nbsp;";
}
}
}
}
?>

Dit is echter een heeeel traag script..
Hoe kan ik dit verbeteren?
iemand?


Dit ff in een while loop


<?php

$result = mysql_query("SELECT RAND(veld) AS randomfield FROM tabel LIMIT 5") or die("fout1");

while($row = mysql_fetch_assoc($result)){

echo $row['randomfield'].'<br>';

}

?>

Dit is niet getest maar zoiets zou het moeten zijn. Let wel op je foutafhandeling.
Dit krijg ik niet aan de praat..
Kun je niet gewoon de offset gebruik van limit.

Je krijgt dat wel random vijf op een volgende records.

dus:

SELECT * FROM tabel LIMIT [random getal 0 t/m x],5

edit:

Je zou ook gewoon 10 reconds uit de database kunnen halen. Met de query hierboven en daaruit 5 records random kunnen selecteren.
Ik zou de oplossing ORDER BY RAND() LIMIT 5 in je query gebruiken. Tevens zou ik de gegevens ook gewoon met 1 query ophalen ipv er twee te gebruiken.

SELECT
    p.profiel_id,
    p.naam,
    a.locatie
FROM
    tbl_profielen AS p,
    tbl_afbeelding AS a,
WHERE
    p.pasfoto_id = a.afbeelding_id
ORDER BY RAND()
LIMIT 5

Als niet elk profiel een pasfoto heeft zou je, als je ook profielen zonder pasfoto wilt tonen, een LEFT JOIN kunnen gebruiken.

Reageren