![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 2 Dołączył: 27.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Przejdę od razu do rzeczy: posiadam autorski skrypt, listujący wybrane podmioty z bazy MySQL. Dzieje się to za pomocą utworzonych kategorii (czego działania nie muszę chyba tłumaczyć, bo takie opcje ma większość współczesnych CMSów). Powiedzmy, że w skrócie tak wygląda struktura podmiotów: id | category | name | col. Owe podmioty mają być wyświetlane wg jednej z kolumn (dajmy col DESC), a drugim parametrem ma być kolejność losowa. Problem w tym, że owe "losowanie" ma odbywać się co jakiś czas, np. co godzinę. No właśnie, jak to zrobić? Jak zrobić, by losowanie zwracało te same wyniki dla wybranego przedziału czasowego (określanego w minutach) ? Myślałem nad ciastkami, sesjami itp. w których przechowywane byłyby IDy podmiotów (wszystko jakoś zaszyfrowane wraz z sumą kontrolną - zawsze bezpieczniej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ). W przypadku ich istnienia skrypt zaczytywałby i wyświetlał listę zapisanych pozycji. Problem w tym, że trzymanie tych danych w sesjach jest niemożliwe (ze względu na strukturę systemu, która co jakiś czas opróżnia wszystkie dane sesyjne), a w ciastkach mogłoby się okazać zbyt hmm... "nieoptymalne". No właśnie, ja poszukuję optymalnego rozwiązania, gdyż przecież ilość owych podmiotów nie jest zależna ode mnie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . Podczas wczorajszych rozmów z kolegą wpadłem na pomysł, aby wylosowane IDy (SELECT id FROM tbl WHERE category="n" ORDER BY tbl DESC, RAND()) zapisywać w bazie, np. id | category | idz - gdzie idz będzie miało postać np. "5,13,88,33,45,74,2,14,22". Ew. dodałoby się kolumnę page, która odpowiadałaby numerowi strony podczas listingu danej kategorii, co znacznie usprawniłoby wyświetlanie wyników. I tu pojawia się kolejny problem: jak pobrać tylko rekordy o podanych IDach, ale w taki sposób, by ich kolejność była zależna od parametru? Czyli mam zapisane te numery do pobrania i jak to mogę zrobić, by zostały wyświetlone jedynie one i w "wejściowej" kategorii? Bo nie mam pomysłu dla WHERE id IN (n1,n2,n3...) by wyniki były posortowane jak ja chcę... |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Nieautoryzowani Postów: 92 Pomógł: 15 Dołączył: 21.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witaj
Nie wiem czy dobrze zrozumiałem, ale może chodzi ci o coś takiego
liczba 3600 to dana co ile sekund ma odbyc sie to "niby" nowe losowanie jak zmienisz na 10 to po kazdych 10 sekundach bedzie zmieniona kolejnosc wynikow pozdr PS. mozesz pominac RAND() czyli zostaje ROUND(UNIX_TIMESTAMP()/3600) Ten post edytował heaven 28.08.2008, 13:43:08 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 15:09 |