Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] co tydzień inna kolejność rekordów z bazy danych
Forum PHP.pl > Forum > PHP
M@X
Witam.
Mam w bazie kilka wierszy, np ID od 1 do 4.
W jaki sposób mogę wyświetlać je tak aby co tydzień zmieniała się ich kolejność ? np w tym tygodniu kolejność jest 1,2,3,4 a w kolejnym tygodniu 2,3,4,1.
Fifi209
Cytat(M@X @ 26.05.2010, 21:36:26 ) *
Witam.
Mam w bazie kilka wierszy, np ID od 1 do 4.
W jaki sposób mogę wyświetlać je tak aby co tydzień zmieniała się ich kolejność ? np w tym tygodniu kolejność jest 1,2,3,4 a w kolejnym tygodniu 2,3,4,1.


Hmm wrzucić do tablicy w php, później array_rand, następnie zobaczyć czy tablica nie jest taka jak tydzień temu i po sprawie.
zend
Zapytanie ORDER BY RAND() z tygodniowym cache smile.gif
Fifi209
Cytat(zend @ 26.05.2010, 21:40:36 ) *
Zapytanie ORDER BY RAND() z tygodniowym cache smile.gif


Jednak może się zdarzyć, że wylosowane będą takie jak tydzień temu, dlatego zaproponowałem php. (może jestem zbyt mało biegły w mysql?)
croc
Sposób #1
Cotygodniowy cron wykonujący zapytanie:
  1. ALTER TABLE tabela ORDER BY rand()

Potem wybierasz te rekordy z tabeli bez żadnego kryterium sortującego, po prostu tak jak egzystują sobie w tablicy.

Sposób #2
Mniej inwazyjny, również cotygodniowy cron. Robisz dodatkową kolumnę z wagami, np. weight. W cronie robisz coś takiego:
  1. $query = mysql_query('SELECT id FROM tabela');
  2. $weights = range(1, mysql_num_rows($query));
  3. shuffle($weights);
  4. for($i = 0; $row = mysql_fetch_assoc($query); ++$i) {
  5. mysql_query('UPDATE tabela SET weight = ' . intval($weights[$i]) . ' WHERE id = ' . intval($row['id']));
  6. }


I potem wybierasz rekordy z bazy np. tak:
  1. SELECT * FROM tabela ORDER BY weight ASC
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.