Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: losowanie rekordów z tablicy
Forum PHP.pl > Forum > PHP
Norbit_24
Witam

Wyświetlam sobie 10 ostatnich rekordów zapytaniem:

  1. $zapytanie = mysql_query("SELECT * FROM tabela1 WHERE `spr`='nie' ORDER BY id DESC LIMIT 10") or die ("Błąd w zapytaniu");


Chcę to teraz zapisać do tablicy. A później z tej tablicy wylosować 1 rekord, (nastepnie chce go przetworzyć ale z tym sobie juz poradzę) jak to zrobić..?
blooregard
http://pl.php.net/array_rand
Norbit_24
  1. $zapytanie4 = mysql_query("SELECT * FROM konta WHERE `spr`='nie' ORDER BY id DESC LIMIT 10") or die ("Błąd w zapytaniu");
  2.  
  3. $tab = mysql_fetch_row($zapytanie4);
  4.  
  5. $rand_keys = array_rand($tab);
  6.  
  7. echo $tab[$rand_keys[0]] . "\n";
  8. echo $tab[$rand_keys[1]] . "\n";
  9.  
  10.  
  11. print_r($tab);


Wyświetla mi tylko jeden rekord (z którego losuje poszczególne kolumny), a powinno wyświetlić 10. I z tych 10 powinno wybrac jeden.

Czyli musi być tak jakby jedna tablica, która zawiera mniejsze tablice.

  1. $tab = array(
  2.  
  3. "cos1" => array(id, cos1, cos2, cos3),
  4. "cos2" => array(id, cos1, cos2, cos3),
  5.  
  6. ),
  7.  
  8. $rand_keys = array_rand($tab, 1);
  9. echo $tab[$rand_keys[0]] . "<br />";


Tylko nie wiem jak to zrobić, żeby dzialało.
pyro
Zajrzyj do manuala i popatrz na tę funkcję array_rand(); Zwłaszcza na drugi argument.
Norbit_24
Jako 2 agrument podaje się ilość zwracanych rekordów. Ja chcę zwrócić tylko 1.
Dalej nie wiem jak to zrobić.

Proszę o przykład,
nospor
Cytat
Wyświetla mi tylko jeden rekord (z którego losuje poszczególne kolumny), a powinno wyświetlić 10. I z tych 10 powinno wybrac jeden.
bo mysql_fetch_row() uzywasz tylko raz czyli pobierasz tylko jeden rekord. Jak chcesz pobrac wszystkie rekordy to musisz uzyc petli WHILE - w manualu masz przyklady.

Cytat
Jako 2 agrument podaje się ilość zwracanych rekordów. Ja chcę zwrócić tylko 1.
Dalej nie wiem jak to zrobić.
To dlaczego dajesz dla Pyro POMOGL? W zaden sposob nie przyczynil sie do rozwiązania Twojego problemu, nawet dobrze go nie przeczytal. Nie dawaj na lewo i prawo POMOGl bo tylko zaciemniasz sprawe
Norbit_24
No to robie tak:

  1. $zapytanie4 = mysql_query("SELECT * FROM konta WHERE `spr`='nie' ORDER BY id DESC LIMIT 10") or die ("Błąd w zapytaniu");
  2.  
  3. //$tab = mysql_fetch_row($zapytanie4);
  4.  
  5. $result = Array ();
  6.  
  7. while ($tab = mysql_fetch_assoc($zapytanie4)) {
  8.  
  9. $rand_keys = array_rand($result);
  10.  
  11. echo $tab[$rand_keys[0]] . "<br />";
  12.  
  13.  
  14. print_r($tab);
  15.  
  16. }


i zamiast pokazywac 1 losowy rekord wywala mi wszytskie 10

darko
Ale nie, ale nie, ale nie. Raczej
  1. $zap = mysql_query("SELECT * FROM konta WHERE `spr`='nie' ORDER BY id DESC LIMIT 10") or die (mysql_error());
  2. $result = array();
  3. while ($tab = mysql_fetch_array($zap, MYSQL_NUM)) {
  4. $result[] = $tab[0];
  5. }
  6. echo array_rand($result);
mortus
@darko Tylko, że w $result znajdą się wartości z pierwszej kolumny w tabeli baz danych. Poza tym array_rand() zwraca klucze (index-y) tablicy, a nie wartości w niej zapisane.

@Norbit_24 Najpierw pobieramy dane z bazy danych i zapisujemy je do tablicy w pętli while, a dopiero później z tej tablicy losujemy rekord.
  1. $results = mysql_query("SELECT * FROM konta WHERE `spr`='nie' ORDER BY id DESC LIMIT 10") or die ("Błąd w zapytaniu");
  2. $tab = array();
  3. while ($row = mysql_fetch_assoc($results)) {
  4. $tab[] = $row;
  5. }
  6. $randed_row = $tab[array_rand($tab)];
  7. print_r($randed_row); // lub echo $randed_row['nazwa_kolumny'];
  8. ?>
Norbit_24
Wielkie dzięki!
Bo już się całkiem pogubiłem.

Pozdrawiam
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.