L'ultimo articolo scritto su Sir Bit risale a marzo 2014. La versione che state visitando è un archivio: le pagine sono accessibili come sempre e gli autori potrebbero rispondere ai commenti, ma non saranno inseriti dei nuovi articoli. Visita questa pagina per i dettagli.

MySql – Estrarre solo record specifici con una query

Nell’estrazione di record, spesso ci dobbiamo confrontare con la necessità di estrarre soltanto un determinato numero di righe da una tabella.

Quando le righe da estrarre sono l’una successiva all’altra, è cosa facile: basta utilizzare la clausola del limit (come abbiamo visto, per esempio, nella suddivisione di record su più pagine).
Per estrarre i primi 100 record di una tabella, per esempio, useremo la seguente query:

1
SELECT * FROM tabella LIMIT 0,100;

Ma come fare quando le righe non sono contigue?
A seconda dei casi, naturalmente, abbiamo diversi modi di approccio. Di seguito vediamo due casistiche che vi permetteranno, elaborandole, di coprire altri casi più complessi.

Mostrare i valori delle colonne che appaiono N volte

1
SELECT id FROM tabella GROUP BY id HAVING COUNT(*) = 3;

La clausola having si usa per specificare un filtro di condizione. La troviamo spesso associata alla clausola group by, ma non sempre: in assenza di quest’ultimo, having assume un ruolo molto simile al classico where (con la sostanziale differenza che il where applica la condizione a una sola riga, mentre having la applica a tutti i gruppi di righe).

Nel nostro esempio, estrarremo solo i record che, raggruppati per id, appaiono esattamente tre volte nella tabella.


Mostrare ogni N record della tabella

1
SELECT * FROM ( SELECT id FROM tabella ) AS temp WHERE MOD( temp.id, 3 ) = 0;

Un po’ più sofisticata della precedente, ma con una breve spiegazione diventa facile da capire.
Come abbiamo visto, il mod fa parte delle funzioni matematiche native del MySql e il suo scopo è di restituisce il resto della divisione tra due numeri.

Nell’esempio, recupereremo solo quei record della tabella che hanno un id divisibile per 3 (quindi, in assenza di “buchi”, estraiamo un record ogni tre).

Etichette
Etichette:
Ultimi Commenti
  1. Simone

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.