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).
Ciao, ma se io ho una query del tipo
$args = (array
…
…
);
come posso mostrare solo i primi 3 record dopo averli ordinati per meta_value?
Grazie
Immagino che per “meta_value” intendi il campo nel db di WordPress… In ogni caso, se ho capito bene quello che ti serve, ti basta eseguire la query mysql con “limit 0,3” e poi estrarre tutti i record che tira fuori