![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 17.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
W zapytaniu mam ORDER BY RAND(). Losuje mi to rekordy z bazy danych. Jest kilka wad, a mnie drażni to, że np: rekordy często mogą się powtarzać, nie ma gwarancji, że wszystkie rekordy zostaną wyświetlone. Macie jakieś propozycje do systemu, który pierwsze pokaże wszystkie rekordy, a dopiero potem będą się one powtarzać? Zależy mi na powtarzaniu, ale dopiero po wyświetleniu wszystkich unikalnych, czyli bez powtórzeń. Wyświetlanie rekordów na stronie głównej to wyświetlenie 1 rekordu losowego, po naciśnięciu odpowiedniego przycisku pokazuje się kolejny rekord. Nie oczekuję GOTOWCA, lecz porady, pomysłu i ewentualnych pomocy w tworzeniu skryptu. Z góry dziękuję i pozdrawiam, Arek! |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
Jak Ci się rekordy mogą powtarzać? RAND() tylko je w losowej kolejności wyświetli, a to czy ty w bazie masz kilka takich samych wpisów czy nie to już nie zależy od funkcji rand(), więc albo zrób porządek w bazie albo zastosuj GROUP BY nazwa_pola (grupowac najlepiej po ID).
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 17.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Niee, każdy rekord jest unikalny, ale zapytanie po naciśnięciu przycisku wysyła się ponownie, czyli rekordy mogą się powtarzać po kilku kliknięciach.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
Można by stworzyć dodatkowy wiersz w bazie i zapisywać które było wylosowane ale to nieoptymalne ponieważ gdy większość będzie już wylosowana to baza sporo się napracuje aby wyszukać niewylosowaną wartość. Ja bym pobrał wszystkie wartości albo id z których baza losuje i wsadził do tablicy w php, potem shuffle($tablica) i z powrotem do bazy do innego wiersza. Następnie po kolei z bazy pobierać to co było przetasowane i sprawdzać przy okazji czy to nie ostatni rekord. Do formularza można dołączyć ukryty input albo sesję z aktualnym rekordem pobranym i przy odbiorze formularza pobierać następny rekord z bazy.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Musiałbyś najpierw gdzieś pobrać i wymieszać identyfikatory rekordów, zapisać je w jakimś trwałym miejscu (sesja/plik w zależności od potrzeb). Przy przeładowaniu wycinasz fragment tych rekordów i zwracasz wyniki już po identyfikatorach, bez konieczności mieszania.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.07.2025 - 09:22 |