Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowe wyświetlanie danych (linków) z sql
Forum PHP.pl > Forum > PHP
Cenoniada
Witam,

Jak zrobić aby typowane losowe rekordy z bazy sql (w nasze postaci to tabela z linkami (id - link)) za każdym razem były unikalne i niepowtarzalne?

Mamy tutaj funkcję random, która nam ładnie typuje jeden losowo wybrany rekord w postaci linku, lecz wielokrotność wyników jest zawsze ta sama (typuje ten sam losowy rekord np 20 razy) .

  1. <?
  2. $zapytanie = "select @random_link:=link from linki order by rand() limit 1";
  3. $wykonaj = mysql_query ($zapytanie);
  4. while($wiersz=mysql_fetch_array ($wykonaj)) {
  5. $uniq=("".$wiersz['@random_link:=link']."");
  6. $_SESSION["uniq"] = $uniq;
  7. }
  8. ?>


Tu wyświetlanie linku (daje te same 3 losowe linki a maja być unikalne):

  1. <? echo$_SESSION["uniq"];?> <? echo$_SESSION["uniq"];?> <? echo$_SESSION["uniq"];?>


Czy ponumerować sesje lub funkcję $uniq ?
erix
RAND(), to jeden z najwolniejszych sposobów na wyciąganie losowego rekordu.

Zrób sobie pętlę losującą 20 liczb (while" title="Zobacz w manualu PHP" target="_manual + mt_rand" title="Zobacz w manualu PHP" target="_manual + in_array" title="Zobacz w manualu PHP" target="_manual) i po prostu wg nich wyciągaj rekordy.
Cenoniada
troszku skomplikowane sad.gif
erix
No patrz:
  1. robisz sobie tablicę na losowe numerki
  2. pętlą while" title="Zobacz w manualu PHP" target="_manual losujesz i sprawdzasz, czy w tablicy jest już wylosowany numerek:
    1. <?php
    2. while(!isset($arr[19])){
    3.  $num = mt_rand();
    4.  if(in_array($num, $arr)){
    5.    continue;
    6.  }
    7.  $arr[] = $num;
    8. }
    9. ?>
  3. w tablicy masz już numerki, teraz podstawiasz je do zapytania tak, aby wyciągnąć rekordy o ID, które są już ustawione w tablicy
Voilá. winksmiley.jpg
Cenoniada
coś jak wyświetl w pętli id z funkcji mt_rand i zrób to w pętli aby za każdym razem generowało inaczej ?

  1. <?php
  2. $zapytanie = "select link from linki where id is echo mt_rand(5, 15)";
  3. ?>


questionmark.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.