Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Obejście RAND() w zapytaniu
Forum PHP.pl > Forum > Przedszkole
ArekBe
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!
Michael2318
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).
ArekBe
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.
_Borys_
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.
Crozin
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.
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.