![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 12 Dołączył: 23.11.2006 Skąd: WL Ostrzeżenie: (0%) ![]() ![]() |
Mam pewien problem z wylosowaniem wyników z bazy.
Próbuje wylosować 3 wyniki obok obecnie przeglądanego filmiku ale przy tym zapytaniu wyżej filmiki nonstop się powtarzają nie wiem jak to zrobić zmienna $video jest to id obecnie przeglądanego filmiku Z góry dziękuje za pomoc Dobra znalazłem już odpowiedź
Tylko że jest drugi problem z użyciem order by rand() przy kilku set tysiącach rekordów zapytanie może się wykonywać kilkanascie sekund tak wyczytałem. A to mnie nie ustawia ponieważ nie chcę zmulać bazy danych. Zna ktoś bardziej optymalne metody? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 15.06.2008 Skąd: Kołaczyce Ostrzeżenie: (0%) ![]() ![]() |
Wyciąg łączną liczbę filmików z bazy danych, wygeneruj dowolną liczbę z przedziału 0,$liczbafilmów i wrzuć do zapytania zamiast order by rand(),
Kod $podobnesql = "SELECT id, nazwa, obraz, nick, views FROM filmiki WHERE idkategori='$idcat' and id<>'$video' LIMIT $losowaliczba,4"; Gdzie $losowaliczba to wygenerowana liczba. Jaka różnica w stosunku do rand? Taka, że pierwszy filmik będzie losowy, a następne trzy, takie, jakie następują po pierwszym, zależnie od sortowania. Troszkę więcej kombinacji, ale przy tych kilkuset tysiącach rekordów, zysk jest. Funkcja rand() musi przeszukać wszystkie rekordy z tabeli, zanim zwróci Ci te cztery pożądane. Korzystając klauzuli LIMIT, od razu mówimy, czego chcemy. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 04:44 |