Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 1 Dołączył: 13.07.2009 Ostrzeżenie: (0%)
|
Zna ktoś jakiś szybki sposób na wybranie 12 losowych rekordów z tabeli, która może mieć nawet kilka milionów wierszy? Do tego biorąc pod uwagę, że będzie bardzo często odczytywana.
Najpierw próbowałem tego: http://blog.desmart.com/2008/03/12/sposob-...-tablicy-mysql/ ale losuje mi 12 rekordów, tyle, że następujących po sobie jeden po drugim, czyli tak naprawdę losuje miejsce startowe, skąd ma pobrać kolejne rekordy. Nie umiem tego przerobić tak by wybrało 12 zupełnie przypadkowych rekordów. Pomyślałem więc, że wylosuję w PHP ok. 50 liczb, i używając ich zadam zapytanie:
Ale to mi nie daje gwarancji, że wybierze dokładnie 12 rekordów, bo przecież niektóre o podanych ID mogą nie istnieć. W sumie mogę tak wybierać rekordy aż uzyskam dokładnie 12 (bo to mała liczba) ale może zna ktoś jakiś lepszy sposób? |
|
|
|
Walian Jak pobrać (szybko) 12 losowych rekordów z tabeli? 22.03.2010, 01:05:19
luki100011 KodSELECT * FROM tabela ORDER BY RAND() LI... 22.04.2010, 11:59:49
nospor @luki100011 zanim udzielisz jakze pomocnej odpowie... 22.04.2010, 12:04:01 
luki100011 Cytat(nospor @ 22.04.2010, 13:04:01 )... 22.04.2010, 18:14:24
phpion Może więc w PHP losuj 12 + X liczb, gdzie X to odp... 22.04.2010, 12:07:52
Mchl http://www.slideshare.net/billkarwin/sql-a...rns-s... 22.04.2010, 12:56:31
nospor @Mchl Twoje rozwiązanie również pobiera 1 rekord. 22.04.2010, 13:02:29
phpion @Mchl:
Zgadza się, jest to dość sprytne rozwiązani... 22.04.2010, 13:04:22
Mchl Jak zostosuje je dosłownie w takiej postaci jak pr... 22.04.2010, 13:06:26
phpion No tak, ale dochodzi tutaj kwestia liczby wykonany... 22.04.2010, 13:08:01
nospor CytatAle kto mu broni wylosować 12 offsetów i złoż... 22.04.2010, 13:08:32
Mchl KodSELECT COUNT(*) FROM test.t_option;
... 22.04.2010, 13:13:57
nospor No i czemu te zestawienie ma sluzyc? Przeciez to o... 22.04.2010, 13:15:47
Mchl Ale dlaczego bez UNION? Skąd taki wymóg? 22.04.2010, 13:19:08
nospor oj... zmieniasz te fronty.. tu mi jakies wyniki, t... 22.04.2010, 13:21:26
phpion Swoją drogą: czy przypadkiem rozwiązanie z IN (1, ... 22.04.2010, 13:21:48
nospor @phpion ale przeciez dla IN musisz podac np. konkr... 22.04.2010, 13:22:45
phpion Cytat(nospor @ 22.04.2010, 14:22:45 )... 22.04.2010, 13:23:31
nospor ps: tak, czytalem twoje poprzednie posty o prawdop... 22.04.2010, 13:23:47
phpion No mi generalnie również nie do końca bo zawsze mo... 22.04.2010, 13:26:03
Mchl Wszystkie metody opierające się na losowaniu warto... 22.04.2010, 13:27:16
melkorm Może po prostu wykorzystując metodę phpion'a d... 22.04.2010, 13:29:48
nospor Cytatdodać do warunku OR 1=1wydaje mi się, ze mysq... 22.04.2010, 13:33:29
Mchl Nie ma co sprawdzać. Dokładnie tak będzie. Jakikol... 22.04.2010, 13:34:04
nospor mozna połaczyc dwie metody:
IN
UNION
limit 12 z l... 22.04.2010, 13:36:07
Mchl Jeżeli taka 'losowość' wystarcza autorowi ... 22.04.2010, 13:39:37
phpion Sprawdziłem u siebie na bazie.
Rekordów w tabeli:... 22.04.2010, 13:41:03
nospor CytatJeżeli taka 'losowość' wystarcza auto... 22.04.2010, 13:46:14
Mchl Dlatego wybór metody trzeba uzależnić od rzeczywis... 22.04.2010, 13:49:07
nospor Cytatczyli zgadzasz się z nim że to zapytanie wylo... 22.04.2010, 19:43:35
luki100011 On napisał że zwraca mu po kolei 12 rekordów
Cytat... 22.04.2010, 21:27:26
nospor no tak. zapytanie ktore podal, te ktore mialo LIMI... 22.04.2010, 21:29:20
phpion @luki100011:
Słowo-klucz zawarte jest w temacie; j... 23.04.2010, 06:54:02
luki100011 Trudno będzie znaleźć coś innego przecież nie pobi... 23.04.2010, 09:16:20 
Mchl Cytat(luki100011 @ 23.04.2010, 10:16... 23.04.2010, 11:51:05
nospor zrob sobie kilku milionową tabele i zrob na niej o... 23.04.2010, 09:20:50
Pilsener Ja bym proponował:
- użycie IN z odpowiednim zapa... 23.04.2010, 19:25:03 
Mchl Cytat(Pilsener @ 23.04.2010, 20:25:03... 23.04.2010, 19:45:48
maly_swd a takie cos? http://jan.kneschke.de/projects/mysql... 24.04.2010, 10:19:28
Mchl Dodatkowa tabela w której trzyma się same wartości... 24.04.2010, 13:39:13 ![]() ![]() |
|
Aktualny czas: 22.12.2025 - 18:15 |