Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]funkcja rand ale z konkretnego zakresu
Forum PHP.pl > Forum > Przedszkole
pawelwel
Witam.

chcę losowo wyświetlić rekordy z mysql po jego id, ale w bazie istnieją id skasowane lub przefiltrowane więc funkcja rand(1,$n) nie zawsze będzie działać.
ma ktoś jakiś pomysł ?
Kshyhoo
A nie tak:
  1. SELECT * FROM tabela ORDER BY rand() LIMIT 1
pawelwel
A jeśli dodam where, to będzie działać ?
  1. SELECT * FROM tabela ORDER BY rand() LIMIT 1 WHERE dzial=komputer
Kshyhoo
Sprawdź, to się dowiesz smile.gif
RiE
Wbudowana funkcja rand() jest mało wydajna, w przypadku dużej liczby rekordów będzie 'muliło'- będzie zauważalny ubytek na wydajności.

Proponowałbym to zrobić tak
1. Pobierasz liczbę wszystkich ID, które spełniają założone przez Ciebie kryteria.
2. Cachujesz to żeby niepotrzebnie nie wykonywać tego zapytania za każdym razem
3. Losujesz za pomocą array_rand() losowe id
4. W SELECT ... dajesz warunek WHERE id IN (tablica z pkt 3)
pawelwel
zmieniłem kolejność i działa, nie wiedziałem że mysql posiada funkcję losową, wielkie dzięki.

Cytat(RiE @ 8.01.2014, 16:48:22 ) *
Wbudowana funkcja rand() jest mało wydajna, w przypadku dużej liczby rekordów będzie 'muliło'- będzie zauważalny ubytek na wydajności.

Proponowałbym to zrobić tak
1. Pobierasz liczbę wszystkich ID, które spełniają założone przez Ciebie kryteria.
2. Cachujesz to żeby niepotrzebnie nie wykonywać tego zapytania za każdym razem
3. Losujesz za pomocą array_rand() losowe id
4. W SELECT ... dajesz warunek WHERE id IN (tablica z pkt 3)


Co to znaczy Cachujesz?

pkt 3. skąd funkcja array_rand będzie wiedziała, jakie ID spełniają mój warunek ? nawet co 5 ID może nie spełniać tego warunku.
RiE
Cytat
Co to znaczy Cachujesz?


Cachowanie jest to proces przechowywania danych, które zostały poddane różnym operacjom.
W tym przypadku pobierasz listę wszystkich ID i 'zapamiętujesz' ją w pamięci. Następnym razem jak skrypt zostanie uruchomiony sprawdzasz czy w pamięci zapamiętana jest ta lista ID jeżeli tak to nie wykonujesz zapytanai do bazy(nie obciążasz jej) tylko wczytujesz te dane z pamięci.
Cache
List of PHP accelerators

Cytat
pkt 3. skąd funkcja array_rand będzie wiedziała, jakie ID spełniają mój warunek ? nawet co 5 ID może nie spełniać tego warunku.


Z punktu 1.
Robisz select w stylu
  1. SELECT id FROM tabela WHERE dzial=komputer


Zwraca ID wszystkich rekordów, które spełniają kryteria, czyli należą do działu komputer. Następnie za pomocą array_rand() losujesz z tej listy id elementów.
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.