Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL]Losowy rekord
sadistic_son
post 28.03.2010, 07:03:21
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 winksmiley.jpg

Ten post edytował sadistic_son 28.03.2010, 07:06:43


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
skowron-line
post 28.03.2010, 07:10:55
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


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
luck
post 28.03.2010, 07:11:06
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 28.03.2010, 09:11:16
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ć.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:25