Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> losowanie rekordów z tablicy
Norbit_24
post
Post #1





Grupa: Zarejestrowani
Postów: 163
Pomógł: 2
Dołączył: 7.03.2009

Ostrzeżenie: (0%)
-----


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ć..?

Ten post edytował Norbit_24 3.05.2010, 23:14:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




http://pl.php.net/array_rand
Go to the top of the page
+Quote Post
Norbit_24
post
Post #3





Grupa: Zarejestrowani
Postów: 163
Pomógł: 2
Dołączył: 7.03.2009

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
pyro
post
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Zajrzyj do manuala i popatrz na tę funkcję array_rand(); Zwłaszcza na drugi argument.
Go to the top of the page
+Quote Post
Norbit_24
post
Post #5





Grupa: Zarejestrowani
Postów: 163
Pomógł: 2
Dołączył: 7.03.2009

Ostrzeżenie: (0%)
-----


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,

Ten post edytował Norbit_24 4.05.2010, 10:04:44
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Norbit_24
post
Post #7





Grupa: Zarejestrowani
Postów: 163
Pomógł: 2
Dołączył: 7.03.2009

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post
darko
post
Post #8





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
mortus
post
Post #9





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


@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. ?>
Go to the top of the page
+Quote Post
Norbit_24
post
Post #10





Grupa: Zarejestrowani
Postów: 163
Pomógł: 2
Dołączył: 7.03.2009

Ostrzeżenie: (0%)
-----


Wielkie dzięki!
Bo już się całkiem pogubiłem.

Pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 16:37