Sommario: in questo tutorial, imparerete varie tecniche per selezionare record casuali da una tabella di database in MySQL.

A volte, dovete selezionare record casuali da una tabella, per esempio:

  • Selezionare alcuni post casuali in un blog e visualizzarli nella barra laterale.
  • Selezionare una citazione casuale per visualizzare il widget “citazione del giorno”.
  • Selezionare immagini casuali in una galleria e usarle come immagini in primo piano.

MySQL seleziona record casuali usando ORDER BY RAND()

MySQL non ha alcuna dichiarazione integrata per selezionare righe casuali da una tabella. Per fare questo, si usa la funzione RAND().

La seguente query seleziona una riga casuale da una tabella di database:

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

Esaminiamo la query in maggior dettaglio.

  • La funzione RAND() genera un valore casuale per ogni riga della tabella.
  • La clausola ORDER BY ordina tutte le righe della tabella in base al numero casuale generato dalla funzione RAND().
  • La clausola LIMITprende la prima riga del risultato ordinato in modo casuale.

Se vuoi selezionare N record casuali da una tabella di database, devi modificare la clausola LIMIT come segue:

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

Vedi la seguente tabella customers dal database di esempio.

L’esempio seguente seleziona cinque clienti casuali dalla tabella customers:

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

Prova

Nota che potresti ottenere un risultato diverso perché è casuale.

Questa tecnica funziona molto bene con una piccola tabella. Tuttavia, sarà lenta per le grandi tabelle perché MySQL deve ordinare l’intera tabella per selezionare quelle casuali.

La velocità della query dipende anche dal numero di righe nella tabella. Più righe ha la tabella, più tempo ci vuole per generare il numero casuale per ogni riga.

MySQL seleziona i record casuali usando la clausola INNER JOIN

Questa tecnica richiede che la tabella abbia un campo chiave primaria ad incremento automatico e che non ci sia uno spazio vuoto nella sequenza.

La seguente query genera un numero casuale basato sulla colonna della chiave primaria:

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

Possiamo unire la tabella con il set di risultati restituito dalla query precedente come segue:

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

Utilizzando questa tecnica, è necessario eseguire la query più volte per ottenere più di una riga casuale perché se si aumenta il limite, la query vi darà solo righe sequenziali che iniziano dalla riga scelta casualmente.

La seguente query restituisce un cliente casuale dalla tabella customers.

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

Prova

MySQL seleziona record casuali usando variabili

Nel caso in cui la tabella abbia la colonna id con i valori che rientrano in un intervallo 1..N e non ci sia uno spazio vuoto nell’intervallo, puoi usare la seguente tecnica:

  • Prima, seleziona numeri casuali nell’intervallo 1..N.
  • Secondo, seleziona i record basati sui numeri casuali.

La seguente dichiarazione ti aiuta a realizzare questo:

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

Nota che le variabili definite dall’utente sono specifiche della connessione. Ciò significa che questa tecnica non può essere usata con il pooling delle connessioni. Inoltre, la chiave primaria deve essere di tipo intero e i suoi valori devono essere in sequenza senza spazi vuoti.

In questo tutorial, vi abbiamo mostrato diverse tecniche per selezionare record casuali da una tabella.

  • È stato utile questo tutorial?
  • SìNo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.