Jak wybrać losowy rekord (lub losowe rekordy) z tabeli.doc

(28 KB) Pobierz
[MySQL][PHP] Jak wybrać losowy rekord (lub losowe rekordy) z tabeli

[MySQL][PHP] Jak wybrać losowy rekord (lub losowe rekordy) z tabeli?

Problem

Chcesz pobrać losowy rekord lub kilka losowych rekordów z tabeli w bazie danych.

Rozwiązanie

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.

 

...
Zgłoś jeśli naruszono regulamin