Losowe porządkowanie zbioru wyników MySQL

Niekiedy możesz potrzebować losowego porządkowania zbioru wyników MySQL, na przykład przy losowym wyborze zwycięzców w losowaniu nagród. W tym poście dowiesz się jak to zrobić, a w następnym przyjrzymy się “losowemu” zamawianiu danych na wielu stronach.

Korzystając z przykładu losowania nagród, powiedzmy, że przeprowadziliśmy ankietę i mieliśmy zamiar dać nagrodę 10 osobom, które wypełniły ankietę. Osoby te mają zostać wybrane losowo. Tabela nazywa się “ankieta” i chcemy uzyskać ich dane kontaktowe.

Aby wybrać 10 rekordów z tabeli w kolejności losowej, wykonaj następujące czynności:

SELECT first_name, last_name, email_address, phoneFROM surveyORDER BY RAND()LIMIT 10

Linia ORDER BY RAND() sprawia, że zestaw wyników jest losowy, a linia LIMIT 10 zwraca tylko 10 pierwszych wyników.

Porządkowanie losowe zbioru wyników w ten sposób jest nieefektywne i będzie powolne na dużych zbiorach wyników, ponieważ liczba losowa musi być zastosowana do każdego wiersza zanim zostanie posortowana. Dla celów wybrania zwycięzcy lub podobnych okoliczności jest to świetne, ale nie jest tak użyteczne, jeśli musisz wyświetlać “losowe” wyniki na kilku stronach.

Jeśli potrzebujesz wyświetlać dane “losowo” używając RAND() nie jest to zbyt użyteczne, ponieważ te same rekordy pojawią się na wielu stronach, i nie otrzymasz spójnego zestawu danych, gdy będziesz przeglądał te same strony w przód i w tył. Przyjrzę się jak to zrobić w następnym poście na temat MySQL. Upewnij się, że subskrybujesz mój kanał RSS (szczegóły poniżej), aby nie przegapić.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.