[MySQL][PHP] Jak wybrać losowy rekord (lub losowe rekordy) z tabeli?
Chcesz pobrać losowy rekord lub kilka losowych rekordów z tabeli w bazie danych.
Wybieranie losowych rekordów jest bardzo przydatne i o tyle przyjemne, że losowaniem zajmuje się sama baza danych i nie trzeba realizować losowego wyboru w PHP.
Losować można wszystko co zapisane jest w bazie danych - od nazwy klienta, który dzisiaj będzie miał w sklepie zniżkę, poprzez użytkownika, który dostanie nagrodę w konkursie, aż po bannery, losowe próbki do różnych zadań matematycznych czy zdarzenia w grach losowych.
<?
$sql="SELECT adres,data FROM prenumerata ORDER BY rand() LIMIT 1";
$baza = mysql_connect("localhost", "user", "password");
mysql_select_db("baza1",$baza);
$wynik = mysql_query($sql,$baza);
mysql_close($baza);
$pola = mysql_fetch_array($wynik);
$adres = $pola["adres"];
$data = $pola["data"];
echo $adres," ",$data;
?>
Za losowanie rekordów odpowiedzialne jest zapytanie SQL ORDER BY rand(). Funkcja rand() jest poleceniem MySQL, nie PHP. Sortuje ono pobrane dane w losowej kolejności. Następnie pobierając określoną ilość rekordów z zastosowaniem polecenia LIMIT można uzyskać np. jeden, losowy rekord - jak w przykładzie powyżej.
Gdy wpiszesz LIMIT 6 pobierzesz 6 losowych rekordów z tabeli:
<?
$sql="SELECT * FROM pracownicy ORDER BY rand() limit 6";
$baza = mysql_connect("localhost", "user", "password");
mysql_select_db("baza1",$baza);
$wynik = mysql_query($sql,$baza);
mysql_close($baza);
$wierszy = mysql_num_rows($wynik);
$pol = mysql_num_fields($wynik);
for ($i=0;$i<$wierszy;$i++) {
$wiersz = mysql_fetch_row($wynik);
for ($j=0;$j<$pol;$j++) echo $wiersz[$j]." ";
echo "<br>";
}
?>
W zależności od potrzeb możesz pobierać tylko wybrane pola tabeli lub cały rekord, jak w normalnych zapytaniach SELECT. W pierwszym przykładzie pobrane zostały tylko pola adres i data od osób zapisanych na prenumeratę, a w drugim przykładzie pobierana była cała zawartość rekordu dla wylosowanych pracowników.