Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Rotacja wyników z bazy
mike-j
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 18.11.2007

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


Witam. Mam taki problem.

Chcę zrobić coś takiego, żeby gdy użytkownik wchodzi na stronę to skrypt mieszał dane i je porcjował po 30 na stronę. Wiem jak się porcjuje, ale nie chciałbym czegoś takiego, że jak user da na kolejną stronę wyników, że pokaże mu się ten sam wynik co wcześniej. Konkret: Raz roatuje wyniki i na każdej stronie pokazuje inne. Problem jeszcze polega na tym, że by jak wróci do poprzednich stron to lista wyników była taka jak wcześniej.

REAKCJA PRAWIDŁOWA
strona 1: 5, 8, 30, 29, 78, 654, ...
następna strona
strona 2: 7, 11, 2, 364, 85, ...
poprzednia strona
strona 1: 5, 8, 30, 29, 78, 654, ...

Z góry dzięki za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


A może by tak wykorzystać srand" title="Zobacz w manualu PHP" target="_manual? Wtedy w zmiennej sesji wystarczy zapisać tylko jedną liczbę - ziarno. Ziarno można zapisywać w pliku, żeby mieć pewność że się nie powtórzy, lub losować. Przykład zastosowania:

  1. <?php
  2.  
  3.  
  4. // Jeśli świeża sesja - pobierz nowe ziarno
  5.  
  6. if( empty( $_SESSION['rand_seed'] ) )
  7. {
  8. if( !file_exists( 'rand_seed.txt' ) ) {
  9. touch( 'rand_seed.txt' );
  10. }
  11.  
  12. $_SESSION['rand_seed'] = intval( file_get_contents( 'rand_seed.txt' ) );
  13. ++$_SESSION['rand_seed'];
  14. file_put_contents( 'rand_seed.txt', $_SESSION['rand_seed'] );
  15. }
  16.  
  17.  
  18. // Przykładowa tablica z danymi
  19. $data = range( 1, 100 );
  20.  
  21. // Mieszaj tablicę
  22. srand( $_SESSION['rand_seed'] );
  23. shuffle( $data );
  24.  
  25.  
  26. // Sprawdź poprawność numeru strony
  27. $page = 0;
  28. if( !empty( $_GET['page'] ) && ( $_GET['page'] = abs( intval( $_GET['page'] ) ) ) )
  29. {
  30. if( ( $_GET['page'] + 1 ) * 10 <= count( $data ) ) {
  31. $page = $_GET['page'];
  32. }
  33. }
  34.  
  35.  
  36. // Wyświetl linki i wyniki
  37. if( $page ) {
  38. echo '<a href="?page=' . ( $page - 1 ) . '">poprzednia</a> | ';
  39. }
  40.  
  41. $from = $page * 10;
  42. $to  = $from + 10;
  43. for( $i = $from; $i < $to; ++$i ) {
  44. echo $data[$i] . ' ';
  45. }
  46.  
  47. if( $to < count( $data ) ) {
  48. echo '| <a href="?page=' . ( $page + 1 ) . '">następna</a>';
  49. }
  50.  
  51.  
  52. ?>




[EDIT]
Nie doczytałem, że chodzi o wyniki z bazy danych. Ale to też żaden problem -> mysql.com -> dokumentacja -> RAND()

Użycie "ORDER BY RAND( $seed )" w zapytaniu będzie działało tak jak srand" title="Zobacz w manualu PHP" target="_manual i shuffle" title="Zobacz w manualu PHP" target="_manual w powyższym kodzie.
http://dev.mysql.com/doc/refman/5.1/en/mat...l#function_rand

Ten post edytował Kicok 12.07.2008, 15:18:17
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 16:53