Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]Losowy rekord
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Witam.

1) Jak 'wyselectować' losowy rekord z bazy po id? Wiem jak to zrobić phpem ale interesuje mnie SQL. Jest jakaś funkcja która losuje spośród wszystkich rekordów z danej tabeli, bez podawania przedziałów id (nie ważne czy jest 5 czy 190 rekordów)?

2) Jeśli jest taka funkcja to czy można jej wskazać (np. za pośrednictwem WHERE) jakieś kryteria losowania?
Np. rekordy tabeli:

id ..................dane..................procent prawdopodobienstwa wylosowania
================================================
1..................76r7r..................10
2..................98h67..................15
3..................uytbu..................45
4..................987tn8..................1
5..................ydv4..................25
6..................976bn7................4
================================================
Razem 100% prawdopodobieństwa

Teraz aby przy 100 losowaniach (najpradopodobniej) wylosowało pozycję:
1 - 10 razy
2 - 15 razy
3 - 45 razy
4 - 1 raz
5 - 25 razy
6 - 4 razy

Czy warunek z pytania 2) da się zrobić samym SQLem? Pewnie nie ale zapytać nie zaszkodzi winksmiley.jpg
skowron-line
1 tak
  1. ORDER BY RAND()
i jakiś limit
luck
Ad.1 Chodzi Ci o coś takiego?
  1. SELECT * FROM tabela ORDER BY RAND() LIMIT 1

Edit: a co do pytania 2. to w sumie można tak spróbować:
  1. SELECT * FROM `tabela` ORDER BY RAND() * `procent_prawodpodobienstwa_wylosowania` LIMIT 1
thek
Taaa... A zakres określić można po prostu w WHERE lub rozszerzając go poprzez użycie IN lub BETWEEN. Tylko lojalnie zastrzegam ODER BY RAND() jest mocno obciążające bazę i dlatego jesli się ma możliwość, to powinno się tego unikać. Dopóki rekordów jest mało to jeszcze OK. gdy jest ich dużo to lepiej pobrać sobie choćby id dostępnych rekordów, z nich po stronie php wylosować ileś tam i do bazy już posłać SELECT z owymi konkretnie wybranymi id. To już optymalizacja, ale jeśli się zagłębisz w temat usprawniania serwisu to sam sie dowiesz czego nie powinno się stosować i jak to usprawniać.
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.