Podsumowanie: w tym poradniku, nauczysz się różnych technik, aby wybrać losowe rekordy z tabeli bazy danych w MySQL.

Czasami, musisz wybrać losowe rekordy z tabeli, na przykład:

  • Wybieranie losowych postów na blogu i wyświetlanie ich na pasku bocznym.
  • Wybór losowego cytatu do wyświetlenia w widżecie „cytat dnia”.
  • Wybór losowych zdjęć w galerii i użycie ich jako wyróżnione zdjęcia.

MySQL wybiera losowe rekordy za pomocą ORDER BY RAND()

MySQL nie posiada wbudowanych instrukcji do wybierania losowych wierszy z tabeli. Aby to osiągnąć, używasz funkcji RAND().

Następujące zapytanie wybiera losowy wiersz z tabeli bazy danych:

Code language: SQL (Structured Query Language) (sql)

Przeanalizujmy zapytanie bardziej szczegółowo.

  • Funkcja RAND() generuje losową wartość dla każdego wiersza w tabeli.
  • Klauzula ORDER BY sortuje wszystkie wiersze w tabeli według liczby losowej wygenerowanej przez funkcję RAND().
  • Klauzula LIMIT wybiera pierwszy wiersz w zestawie wyników posortowanych losowo.

Jeśli chcesz wybrać N losowe rekordy z tabeli bazy danych, musisz zmienić klauzulę LIMIT w następujący sposób:

Code language: SQL (Structured Query Language) (sql)

Zobacz następującą customers tabelę z przykładowej bazy danych.

Następujący przykład wybiera pięciu losowych klientów z tabeli customers:

Code language: SQL (Structured Query Language) (sql)

Try It Out

Zauważ, że możesz otrzymać inny zestaw wyników, ponieważ jest on losowy.

Ta technika działa bardzo dobrze w przypadku małej tabeli. Jednak będzie ona powolna dla dużej tabeli, ponieważ MySQL musi posortować całą tabelę, aby wybrać losowe.

Szybkość zapytania zależy również od liczby wierszy w tabeli. Im więcej wierszy ma tabela, tym więcej czasu zajmuje wygenerowanie losowej liczby dla każdego wiersza.

MySQL wybierz losowe rekordy za pomocą klauzuli INNER JOIN

Ta technika wymaga, aby tabela miała pole klucza głównego auto-increment i nie było luki w sekwencji.

Następujące zapytanie generuje losową liczbę na podstawie kolumny klucza podstawowego:

Code language: SQL (Structured Query Language) (sql)

Możemy dołączyć do tabeli z zestawem wyników zwróconych przez powyższe zapytanie w następujący sposób:

Code language: SQL (Structured Query Language) (sql)

Używając tej techniki, musisz wykonać zapytanie wiele razy, aby uzyskać więcej niż jeden losowy wiersz, ponieważ jeśli zwiększysz limit, zapytanie da ci tylko sekwencyjne wiersze, które zaczynają się od losowo wybranego wiersza.

Następujące zapytanie zwraca losowego klienta z tabeli customers.

Code language: SQL (Structured Query Language) (sql)

Try It Out

MySQL wybierz losowe rekordy używając zmiennych

W przypadku, gdy tabela posiada kolumnę id z wartościami, które mieszczą się w zakresie 1..N i nie ma luki w zakresie, możesz użyć następującej techniki:

  • Najpierw wybierz losowe liczby z zakresu 1..N.
  • Po drugie, wybierz rekordy na podstawie liczb losowych.

Pomoże Ci w tym następujące stwierdzenie:

Code language: SQL (Structured Query Language) (sql)

Zauważ, że zmienne zdefiniowane przez użytkownika są specyficzne dla połączenia. Oznacza to, że ta technika nie może być używana z połączeniem pooling. Dodatkowo, klucz główny musi być typu integer i jego wartości muszą być w sekwencji bez luk.

W tym poradniku, pokazaliśmy kilka technik wyboru losowych rekordów z tabeli.

  • Czy ten poradnik był pomocny?
  • TakNie

Czy był pomocny?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.