Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL]Losowy rekord
sadistic_son
post
Post #1





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował sadistic_son 28.03.2010, 07:06:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


1 tak
  1. ORDER BY RAND()
i jakiś limit
Go to the top of the page
+Quote Post
luck
post
Post #3





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


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


Ten post edytował luck 28.03.2010, 07:15:50
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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ć.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 07:25