![]() |
![]() |
![]()
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: 200 Pomógł: 38 Dołączył: 1.12.2010 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Metoda sprawdzona jako około 10% szybsza od naturalnego losowania przez rand mimo wykonania subquery. Odpowiedź dostosowałem do przykładu wyżej:
Dzięki temu, że tablica tymczasowa generowana przez ORDER BY RAND() posiada tylko dwie kolumny czyli id i wartość losową po której odbędzie się sortowanie zachodzi znacznie szybciej, niż dla całej przepisanej tablicy, którą trzeba posortować. Mimo, że jest to użycie subquery wyciągające losowe id dla miliona wygenerowanych przeze mnie losowych rekordów uzyskuje 10% szybszy czas wykonania. Jednak wciąż nie jest to rozwiązanie wystarczające. Powiem tylko że wyciąganie ilości elementów i później losowanie 3 z zakresu 0 do $max jest bezsensowne niestety... Jaka pewność, że połowa elementów nie została usunięta wewnątrz? Wtedy między wyznaczonym zakresem będzie luka, która może zostać wylosowana i przekazana do bazy danych. -------------------- Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 16:55 |