Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Losowy rekord
trueblue
post
Post #1





Grupa: Zarejestrowani
Postów: 6 809
Pomógł: 1828
Dołączył: 11.03.2014

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


Witajcie,
zna ktoś może inny sposób niż zopytmalizowany ORDER BY RAND() poprzez ID>=FLOOR(1+RAND()*MAX(ID)) ?
Chodzi o to, że metoda ma mankament przy nieciągłości ID.
Przykładowo:
ID
126 0
134 0,666666667
136 0,833333333
137 0,916666667
138 1
Jak z tego wynika pierwsze ID wpada w połowę dolnego przedziału.

Ostatecznie zastosowałem PHP, ale być może zna ktoś rozwiązanie na poziomie SQL.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Podstawowe pytanie: jakiej mniej-więcej wielkości jest pula rekordów spośród których chcesz losować wiersz? Jeżeli jest ona względnie niewielka zwykłe ORDER BY RAND() jest jak najbardziej poprawnym rozwiązaniem. Jeżeli jednak tych rekordów jest sporo skorzystaj z rozwiązania zasugerowanego przez @nospor.

Ten post edytował Crozin 6.08.2014, 10:28:21
Go to the top of the page
+Quote Post

Posty w temacie
- trueblue   Losowy rekord   6.08.2014, 10:07:46
- - nospor   Najlepszy bylby limit, ale do tego musisz uzyc jes...   6.08.2014, 10:20:14
- - Crozin   Podstawowe pytanie: jakiej mniej-więcej wielkości ...   6.08.2014, 10:27:47
- - trueblue   Crozin, nie jest duża, ale ruch w serwisie jest ba...   6.08.2014, 10:30:30
- - patryczakowy   a co jest w $arr wszystkie rekordy z tabeli?   6.08.2014, 10:33:54
- - nospor   @trueblue ale w swoim rozwiązaniu musisz pobrac ws...   6.08.2014, 10:35:20
- - Pyton_000   A może po prostu coś takiego: [SQL] pobierz, plai...   6.08.2014, 10:45:49
- - trueblue   Cytat(nospor @ 6.08.2014, 11:35:20 ) ...   6.08.2014, 10:45:58
- - nospor   Pry 50 rekordach order by rand nie powinno mulic i...   6.08.2014, 10:55:30
- - Pyton_000   W tym że pobiera tylko jedną kolumnę ID, która jes...   6.08.2014, 11:00:54
- - Crozin   @trueblue: Jeżeli masz raptem 50 rekordów spośród ...   6.08.2014, 11:02:19
- - mmmmmmm   [SQL] pobierz, plaintext SELECT * FROM tabela ORDE...   6.08.2014, 11:06:40
- - nospor   @Pyton faktycznie masz racje. Pobranie jednej kolu...   6.08.2014, 11:10:40
- - trueblue   1. Moja metoda 2. Nospor ze znikomym opóźnieniem, ...   6.08.2014, 11:28:24
- - nospor   Nom, przy malej liczbie rekordow miejsca 1 i 2 mog...   6.08.2014, 11:32:52
- - Pyton_000   Jeżeli różnica rzędu 0.03 to taka wielka różnica ...   6.08.2014, 11:38:54
- - nospor   @Pyton przy 50 rekordach nie ma co oczekiwac, ze r...   6.08.2014, 11:41:38
- - trueblue   Dziękuję wszystkim za zaangażowanie i pomysły.   6.08.2014, 11:42:51
- - Pyton_000   Można jeszcze taką magią: [SQL] pobierz, plaintext...   6.08.2014, 11:58:59


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: 1.01.2026 - 13:58