Selezione e conteggio delle righe in una query - SQL_CALC_FOUND_ROWS. Selezione e conteggio delle righe in una query - SQL_CALC_FOUND_ROWS Utilizzo della funzione COUNT() con un esempio

Una volta ho affrontato questo problema, ma molte delle soluzioni offerte su Internet non hanno funzionato per me. Eppure ho trovato un modo. E nemmeno uno.

Metodo 1: phpMyAdmin

Cominciamo con il più semplice e il più ovvio. Supponiamo che non sia necessario utilizzare il risultato nel codice, ma semplicemente scoprire il numero di righe, tutto qui.

Quindi andiamo su phpMyAdmin (localhost / tools / phpmyadmin - per Denver), quindi selezioniamo il database desiderato, quindi selezioniamo la tabella in cui deve essere determinato il numero di righe e vediamo il seguente messaggio:

Metodo 2. CONTE

Ecco come appare la query SQL stessa:

Query SQL con condizione:

Implementazione in PHP:

Allo stesso modo, qui è possibile aggiungere una condizione. Quindi il codice visualizzerà il numero di righe nella tabella che soddisfano la condizione.

Metodo 3. mysql_num_rows

Ad esempio, in WordPress, i post sono archiviati nella tabella wp_posts, quindi possiamo scoprire quanti post (post) sono archiviati nel database (nella tabella MySQL). Questo codice è solo per esempio (o per i casi in cui WordPress non è caricato), poiché WordPress si connette al database tramite il file .

Il risultato includerà assolutamente tutti i record. E come scoprire il numero solo di quelli pubblicati? Per fare ciò, dobbiamo modificare leggermente la query SQL.

Dall'autore: un mio amico afferma che Babbo Natale esiste. Ha creduto in lui dopo che il suo figlio più giovane ha ricevuto 10 kg di cioccolatini per il nuovo anno. Ora il prossimo anno dovrai chiedere a Babbo Natale i ripieni per tutti i membri della famiglia! Fortunatamente, nella programmazione web, puoi giocare al sicuro da tali sorprese e determinare in anticipo il numero di righe in MySQL.

Perché sapere quanto?

Qualsiasi tabella è composta da colonne e righe. La quantità di dati archiviati in un database dipende dal numero di righe presenti in ciascuna delle sue tabelle.

Proprio come il numero di buchi nei denti di una persona dipende dal volume dei dolci mangiati prima. Più precisamente, dal peso totale dei dolci che a tuo figlio è stato "dato" per il nuovo anno.

È chiaro che un gran numero di righe nel database MySQL non aumenterà i sigilli in bocca, ma tuttavia, la conoscenza di questo parametro potrebbe essere necessaria quando si ottimizza il proprio sito, per eseguire alcuni script, ecc.

Facilmente!

Per ottenere il numero di righe in MySQL, non è necessario essere "intelligenti" nella compilazione di query SQL. Basta aprire la tabella desiderata nella shell del programma e guardare l'id dell'ultima riga. È questa colonna che viene utilizzata più spesso come chiave univoca e il suo valore viene generato automaticamente (incremento automatico) incrementando uno (+1) a quello precedente.

Per dimostrare questo "assioma", apriamo una tabella di qualsiasi database in phpMyAdmin. Ad esempio, la tavola degli animali. Come puoi vedere nello screenshot, il valore della colonna id va in ordine, da 1 a... Quindi, metti da parte! E dove è scappato il gatto con il “numero di identificazione” 4? Probabilmente, ancora, i "cani" ai numeri 5 e 6 erano spaventati

In questo database MySQL, il numero di righe nella tabella può essere semplicemente contato "sulle dita". Ma cosa succede se la tabella non ha 7 righe, ma diverse centinaia? Ad esempio, come in questo.

E questa è solo una delle otto pagine del campione. In effetti, il numero di record può essere calcolato non solo in centinaia, ma anche in migliaia. Inoltre, non esiste una colonna id perché è facoltativa. La sua presenza dipende dalla struttura dell'intero database, poiché i valori di tutte le righe in esso contenute sono interconnessi. Si scopre che il metodo di conteggio delle righe MySQL descritto sopra non funziona sempre.

Alcuni metodi corretti

Come si suol dire, il primo metodo è "grumoso", quindi consideriamo diversi modi più efficaci e meno "semplici":

La funzione COUNT() restituisce il numero di righe. È una funzione SQL incorporata. Tuttavia, scopriamo il numero di record di una tabella di grandi dimensioni dal database, il cui screenshot è riportato sopra. Codice richiesto:

SELEZIONA COUNT(*) DA `paese`

SELEZIONA COUNT (*) DA `paese`

Si scopre che ci sono ben 239 record nella tabella dei paesi! È chiaro che non ci saranno abbastanza dita delle mani o dei piedi per contarle (se non usi gli arti di altre persone o animali)). Come puoi vedere, questo metodo in MySQL di contare il numero di righe funziona in modo molto più accurato ed è usato più spesso.

Ma questa funzione fa molto di più! Ad esempio, può essere utilizzato per scoprire quanti dei paesi "rappresentati" nel database sono in Europa:

E anche quante volte ogni paese è menzionato nella tabella. Esempio di richiesta:

SELEZIONA `Nome` , COUNT(*) DA `paese` GRUPPO PER `Nome`

SELEZIONA ` Nome ` , CONTEGGIO (*) DA ` paese ` GRUPPO PER ` Nome `

Con questa query, abbiamo scoperto il numero di righe in MySQL che menzionano ciascun paese. Dai risultati della sua esecuzione, si può vedere che una volta.

Ho quasi dimenticato! Se non hai ancora il database mondiale con cui stiamo lavorando oggi, puoi scaricarlo da questo link dal sito ufficiale degli sviluppatori MySQL DBMS. Dopo aver scaricato l'archivio con esso, è necessario decomprimerlo e quindi importare un server non DB. In phpMyAdmin, questo può essere fatto attraverso la voce del menu principale "Importa".

Ho parlato di questa procedura in modo più dettagliato in uno dei miei articoli precedenti.

La funzione MAX() - in alcuni casi consente anche a MySQL di scoprire il numero di righe in una tabella. Perché a volte? Ti spiego ora. Ricorda il primo modo di contare che abbiamo visto all'inizio. Implica che il valore più grande della colonna id è uguale al numero di record. L'uso di questa funzione è una sorta di "automazione" di quel metodo. MAX() restituisce il valore massimo della colonna specificata (id). Per testare la funzione, utilizzeremo la tabella delle città, che fa anche parte del database mondiale. Codice richiesto:

SELEZIONA MAX(`ID`) DA `città`

SELEZIONA MAX (` ID` ) DA `città`

Come risultato della query, abbiamo ottenuto il valore della colonna dell'ultima riga. Si scopre che MySQL ha contato il numero di righe.

Se necessario, puoi ottenere l'ultima voce nella sua interezza:

SELECT MAX(`ID`),`Nome`,`Codice Paese`,`Distretto`,`Popolazione` DA `città`

SELECT MAX (` ID` ) , ` Nome ` , ` CountryCode ` , ` Distretto ` , ` Popolazione ` DA ` città `

Si noti che per la selezione prima di chiamare la funzione, al posto di "*" elenchiamo il nome di tutte le colonne. Questa è una caratteristica della sintassi quando si utilizzano le funzioni integrate in MySQL.

Determinazione del numero di record in PHP

Spesso nel codice dei siti PHP MySQL, è necessario ottenere il numero di righe per poter quindi passare questo valore come parametro di input per ulteriori elaborazioni. Questo può essere fatto con il seguente codice:

query("SELECT * FROM `country`")) ( printf("La tabella ha %d righe.\n", $result->num_rows); $result->close(); ) mysqli_close($con); ?>

Per determinare il numero di record in una tabella MySQL, è necessario utilizzare la funzione speciale COUNT().

La funzione COUNT() restituisce il numero di record in una tabella che corrispondono ai criteri specificati.

La funzione COUNT(expr) conta sempre solo le righe in cui expr restituisce NOT NULL .

Un'eccezione a questa regola è l'uso della funzione COUNT() con un asterisco come argomento - COUNT(*) . In questo caso, vengono contate tutte le righe, indipendentemente dal fatto che siano NULL o NOT NULL .

Ad esempio, la funzione COUNT(*) restituisce il numero totale di record in una tabella:

SELEZIONA COUNT(*) DA nome_tabella

Come contare il numero di record e visualizzare

Esempio di codice PHP+MySQL per il conteggio e la visualizzazione del numero totale di righe:

$res = mysql_query("SELEZIONARE COUNT(*) DA nome_tabella") $riga = mysql_fetch_row($res); $totale = $riga; // record totali echo $totale; ?>

Questo esempio illustra l'uso più semplice della funzione COUNT(). Ma con questa funzione, puoi eseguire altre attività.

Data una particolare colonna di tabella come parametro, la funzione COUNT(column_name) restituisce il numero di record in quella colonna che non contengono un valore Null. Le voci con valori NULL vengono ignorate.

SELEZIONA COUNT(nome_colonna) DA nome_tabella

Non è possibile utilizzare la funzione mysql_num_rows(), perché per scoprire il numero totale di record, è necessario eseguire una query SELECT * FROM db, ovvero ottenere tutti i record, il che non è desiderabile, quindi è preferibile utilizzare la funzione di conteggio.

$risultato = mysql_query("SELECT COUNT (*) as rec FROM db");

Utilizzo della funzione COUNT() con un esempio

Ecco un altro esempio di utilizzo della funzione COUNT(). Diciamo che c'è un tavolo gelato con un catalogo gelato che contiene ID di categoria e nomi di gelato.

A partire dalla versione 4.0, il DBMS MySQL ha una capacità piuttosto conveniente di contare il numero di tutti i record che corrispondono alla query quando il numero di record è limitato da LIMIT. Quando si lavora con una ricerca nel database, così come quando si seleziona da tabelle con un numero elevato di record, tale funzionalità è semplicemente necessaria.

Sintassi. In una query SELECT, l'elenco di colonne deve essere preceduto dall'opzione SQL_CALC_FOUND_ROWS. Ecco l'inizio della descrizione della sintassi del costrutto SELECT.

SELEZIONARE




select_expr, … …

Pertanto, quando si esegue una query SELECT SQL_CALC_FOUND_ROWS, il DBMS conteggerà il numero totale di righe che corrispondono alla condizione della query e memorizzerà questo numero in memoria. Naturalmente, la query SELECT SQL_CALC_FOUND_ROWS ha senso solo quando si utilizza un limite (LIMIT). Immediatamente dopo aver eseguito la query select, per ottenere il numero di record, è necessario eseguire un'altra query SELECT: SELECT FOUND_ROWS ();. Di conseguenza, MySQL restituirà una riga con un campo, che memorizzerà il numero di righe.

Un esempio delle richieste stesse:

> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE numero > 100 LIMIT 10;
> SELEZIONA RIGHE_TROVATE();

La prima query restituirà (visualizza) 10 righe della tabella tbl_name per le quali è soddisfatta la condizione numero > 100. La seconda chiamata al comando SELECT restituirà il numero di righe che il primo comando SELECT avrebbe restituito se fosse stato scritto senza una dichiarazione LIMIT. Sebbene MySQL debba ricalcolare tutte le righe nel set di risultati quando si utilizza il comando SELECT SQL_CALC_FOUND_ROWS, questo metodo è ancora più veloce rispetto a senza LIMIT perché non è necessario inviare il risultato al client.

Esempi di richieste da PHP:

$risultato = mysql_query("SELEZIONARE SQL_CALC_FOUND_ROWS * DA table1 LIMIT 0, 10", $link);
while ($riga = mysql_fetch_assoc($risultato))
{
var_dump($riga);
}

$risultato = mysql_query("SELECT FOUND_ROWS()", $link);
$num_righe = mysql_result($risultato, 0);
echo "$num_righe Righe\n";

Come risultato dell'esecuzione del codice, a condizione che $link punti a una connessione aperta al DBMS, PHP stamperà 10 righe dalla tabella table1 e quindi un valore intero del numero di righe che corrispondono alla query (escluso LIMIT).

Nelle query UNION, SQL_CALC_FOUND_ROWS può comportarsi in due modi poiché LIMIT può apparire in più posizioni. Il conteggio delle righe può essere eseguito per singole query SELECT o per l'intera query dopo un join.

Lo scopo di SQL_CALC_FOUND_ROWS per UNION è che dovrebbe restituire il numero di righe che verranno restituite senza un LIMIT globale. Le condizioni per l'utilizzo di SQL_CALC_FOUND_ROWS con UNION sono elencate di seguito:

  • La parola chiave SQL_CALC_FOUND_ROWS deve essere specificata nella prima istruzione SELECT.
  • Il valore di FOUND_ROWS() sarà accurato solo se viene utilizzato UNION ALL. Se UNION viene specificato senza ALL, i duplicati vengono eliminati e FOUND_ROWS() è solo un'approssimazione.
  • Se non è presente LIMIT in UNION, SQL_CALC_FOUND_ROWS viene ignorato e viene restituito il numero di righe nella tabella temporanea creata per eseguire UNION.