Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql] co tydzień inna kolejność rekordów z bazy danych
M@X
post
Post #1





Grupa: Zarejestrowani
Postów: 212
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Warszawa

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


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





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Zapytanie ORDER BY RAND() z tygodniowym cache (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(zend @ 26.05.2010, 21:40:36 ) *
Zapytanie ORDER BY RAND() z tygodniowym cache (IMG:style_emoticons/default/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?)
Go to the top of the page
+Quote Post
croc
post
Post #5





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


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


Ten post edytował croc 26.05.2010, 22:59:01
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: 23.08.2025 - 04:18