Computer finestre Internet

Invio di query al database in PHP. Onnipotente funzione Query: la guida definitiva alle query in mysql dalla query php mysqli

Penso che tutti abbiano sentito parlare della regola di Pareto. In qualsiasi area, il 20% dello sforzo dà l'80% del risultato. Ad esempio, il 20% del tuo guardaroba che indossi l'80% del tempo, il 20% dei tuoi clienti genera l'80% del tuo reddito. Allo stesso modo, in Fogli Google, conoscendo il 20% delle funzioni esistenti, puoi risolvere l'80% di tutti i possibili problemi.

Trovo che Query sia una delle funzionalità più utili di Fogli Google. Ma nell'aiuto di Google è descritto in modo molto superficiale e non viene rivelata la piena potenza di questa funzione. A un esame più attento, diventa chiaro che è in grado di sostituire la maggior parte delle funzioni esistenti.

Avrai bisogno di una conoscenza di base di SQL per lavorare con QUERY. Per chi non lo sapesse, non lasciarti intimidire, la funzione QUERY supporta effettivamente le funzionalità SQL più basilari.

Sintassi QUERY

QUERY (dati; query; [header])
  • dati- questo è un intervallo di celle che fungerà da database per la query SQL;
  • inchiesta- il testo della query SQL;
  • titoliÈ un argomento facoltativo in cui è possibile specificare quante delle prime righe dell'array contengono intestazioni.

Per la massima percezione di ulteriori informazioni, propongo di aprire e copiare il seguente Google Spreadsheet.

Ci sono diversi fogli nel dox di cui hai appena fatto una copia. Il foglio DB è il database a cui accederemo utilizzando la funzione QUERY. I fogli Level contengono esempi che esamineremo in questo articolo. L'esempio diventerà più complicato con ogni nuovo livello.

Piano di query SQL nella funzione Query

Qualsiasi query SQL è costituita da blocchi separati, spesso chiamati calunnia. La funzione SQL per la query utilizza la sintassi del linguaggio di query dell'API di visualizzazione di Google, che supporta i seguenti slip:

  • Selezionare- enumerazione dei campi che verranno restituiti dalla richiesta;
  • dove- contiene un elenco di condizioni in base alle quali verrà filtrato l'array di dati elaborato dalla richiesta;
  • raggruppare per- contiene un elenco di campi in base ai quali si desidera raggruppare il risultato;
  • perno- Aiuta a costruire tabelle incrociate utilizzando il valore di una colonna come i nomi delle colonne della tabella finale;
  • ordinato da- è responsabile dell'ordinamento dei risultati;
  • limite- utilizzando questa parte della query è possibile impostare un limite al numero di righe restituite dalla query;
  • compensare- con l'aiuto di questa calunnia, puoi impostare il numero di prime righe che non devono essere elaborate dalla query;
  • etichetta- questa calunnia è responsabile del nome dei campi restituiti dalla query;
  • formato- è responsabile del formato dei dati di output;
  • opzioni - permette di impostare parametri aggiuntivi per l'output dei dati.

Hello World per la funzione Query (Select)

Andiamo al foglio Level_1 e osserviamo la formula nella cella A1.

Interrogazione (DB! A1: L1143; "seleziona * limite 100")

Parte della formula" DB! A1: L1143" responsabile del database dal quale effettueremo una selezione. Seconda parte " seleziona * limite 100"Contiene il testo della richiesta stessa. L'"*" in questo caso significa restituire tutti i campi contenuti nel database. Usando " limite 100»Limitiamo l'output a un massimo di 100 righe. Questo è un esempio della query più semplice. Abbiamo selezionato le prime 100 righe dal database. Questa è una sorta di "Hello world" per la funzione Query.

Utilizzo di filtri e ordinamento (Dove, Ordina per)

Vai alla scheda Livello_2. Selezioniamo solo alcuni dei campi di cui abbiamo bisogno e impostiamo le condizioni di filtro e ordinamento. Ad esempio, utilizziamo solo i dati per le campagne Campaign_1 e Campaign_2 per il periodo 22-25 ottobre 2015. Ordiniamole in ordine decrescente per la somma delle sessioni. Per filtrare e ordinare, è necessario aggiungere una descrizione diffamatoria al testo della richiesta In cui si e Ordine... Per visualizzare l'esempio sopra descritto nella tabella dei risultati, abbiamo bisogno dei campi Campagna, Data e Sessioni. Sono loro che devono essere elencati nella calunnia. Selezionare.

Il riferimento ai campi del database avviene tramite i nomi delle colonne del foglio di lavoro su cui si trova il database.

Nel nostro caso i dati che si trovano sul foglio DB e riferiti a determinati campi vengono scritti come nome delle colonne del foglio. Pertanto, i campi obbligatori si trovano nelle seguenti colonne:

  • campo Data- colonna A;
  • campo Campagna- colonna B;
  • campo sessioni- colonna G.

Di conseguenza, la parte della query che è responsabile dell'elenco dei dati in output sarà simile a questa:

Seleziona A, B, G

Il prossimo nella richiesta è una calunnia In cui si... Quando si scrive una richiesta, la calunnia deve essere posta nell'ordine in cui sono state descritte nella prima sezione di questo articolo. Dopo l'annuncio In cui si dobbiamo elencare le condizioni di filtraggio. In questo caso, stiamo filtrando i dati per nome della campagna (Campagna) e data (Data). Usiamo diverse condizioni di filtraggio. Nel testo della query deve essere presente un operatore OR o AND logico tra tutte le condizioni. Il filtraggio per date è leggermente diverso dal filtraggio per valori numerici e di testo; per applicarlo, è necessario utilizzare l'operatore Data. La parte della richiesta responsabile del filtraggio dei dati sarà simile alla seguente:

WHERE (A> = data "2015-10-22" E A<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2")

Abbiamo suddiviso il filtraggio dei dati tramite parentesi in due parti logiche: la prima filtra in base alle date, la seconda in base al nome della campagna. In questa fase, la formula che descrive i dati da selezionare e le condizioni per filtrare i dati si presenta così:

Query (DB! A1: L1143; "Seleziona A, B, G WHERE (A> = data" 2015-10-22 "AND A<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2")")

Puoi copiarlo e incollarlo, ad esempio, su un nuovo foglio del documento, che viene utilizzato come esempio in questo post, e otterrai il seguente risultato:

Oltre ai soliti operatori logici (=,<, >) la clausola WHERE supporta operatori di filtro aggiuntivi:

  • contiene- controlla il contenuto di alcuni caratteri in una stringa. Ad esempio, WHERE A contiene 'John' restituirà tutti i valori nella colonna A che contengono John, ad esempio John Adams, Long John Silver;
  • inizia con- filtra i valori per prefisso, ovvero controlla i caratteri all'inizio della riga. Ad esempio, inizia con "en" restituirà ingegneria e inglese;
  • finisce con- filtra i valori a fine riga. Ad esempio, la linea "Cowboy" 'Verrà restituito con" termina con "ragazzo" "o" termina con "y" ”;
  • partite- corrisponde a un'espressione regolare. Ad esempio: dove corrisponde '. * Ia 'Restituiranno i valori di India e Nigeria.
  • Come - una versione semplificata delle espressioni regolari, controlla se una stringa corrisponde a una data espressione utilizzando i caratteri jolly. Al momento like supporta due caratteri jolly: "%" indica un numero qualsiasi di qualsiasi carattere nella stringa e "_" indica un carattere qualsiasi. Ad esempio, "dove nome come' fre% '" corrisponderà alle linee 'fre' ’, 'Fred ', E' Freddy ’.

La richiesta ha già filtrato i dati per un certo periodo e ha lasciato solo le campagne di cui abbiamo bisogno. Resta solo da ordinare il risultato in ordine decrescente a seconda del numero di sessioni. L'ordinamento in queste query viene eseguito tradizionalmente per SQL utilizzando la calunnia Ordinato da... La sintassi è abbastanza semplice: è sufficiente elencare i campi in base ai quali si desidera ordinare il risultato e specificare anche l'ordinamento. L'impostazione predefinita è l'ordine asc, ovvero crescente. Se specifichi il parametro desc dopo il nome del campo, la query restituirà il risultato in ordine decrescente di quello specificato nella barra Ordinato da campi.

Nel nostro caso, la riga nel testo della richiesta sarà responsabile del filtraggio:

Ordina per G desc

Di conseguenza, il risultato finale della formula sul foglio Level_2, che risolve il problema di cui abbiamo bisogno, assomiglia a questo:

Interrogazione (DB! A1: L1143; "SELEZIONARE A, B, G WHERE (A> = data" 2015-10-22 "AND A<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2") ORDER BY G DESC")

Ora puoi filtrare e ordinare i dati utilizzando la sintassi SQL più semplice e la funzione QUERY.

".
Forse i ragazzi dell'ufficio di Mosca non hanno tempo, quindi ci sarà una traduzione gratuita di Query Language Reference (versione 0.7).
API di visualizzazione di Google. Linguaggio di interrogazione (versione 0.7)
Il linguaggio di query dell'API di visualizzazione di Google ti consente di manipolare i dati eseguendo una query su un'origine dati.

In genere, per la visualizzazione, è necessario fornire i dati in una forma specifica. Ad esempio, un grafico a torta richiede due colonne: un'etichetta di testo e un valore numerico. L'origine dati, tuttavia, potrebbe non corrispondere a questa struttura. Può contenere più colonne, oppure il loro ordine sarà diverso da quello richiesto per il diagramma.
Il linguaggio di query ci consente di strutturare i dati nel modo in cui abbiamo bisogno di ottenere un risultato.
La sintassi del linguaggio di query è simile a SQL. Coloro che sono esperti nell'uso di SQL saranno in grado di padroneggiare rapidamente il linguaggio di query. La sezione sintassi identifica le differenze in queste lingue.
Si noti che non è sempre necessario utilizzare un linguaggio di query per il rendering. Per utilizzarlo è necessaria una base. Al contenuto.

Utilizzo del linguaggio di query

Puoi aggiungere una stringa di query a un'origine dati in due modi: dal codice JavaScript o come parametro a un collegamento all'origine dati. Se il tuo collegamento non contiene parametri di query, per impostazione predefinita viene restituito l'intero set di dati. Puoi modificare questo set adattando la query all'origine dati stessa.

Se stai utilizzando la funzione QUERY in Fogli Google, puoi saltare i passaggi successivi e passare alla parte successiva.

Impostare una richiesta da JavaScript

Per impostare la stringa di query dal codice JavaScript, è necessario chiamare il metodo setQuery google.visualization.Query classe.
var query = new google.visualization.Query (DATA_SOURCE_URL);
query.setQuery ("seleziona reparto, somma (stipendio) gruppo per reparto");
query.send (handleQueryResponse);

La stringa di query all'origine dati può essere aggiunta utilizzando il parametro tq... Pertanto, è possibile utilizzare visualizzazioni scritte da altri sviluppatori, semplicemente regolando il loro set di dati.
La stringa di query deve essere codificata correttamente come URL. Puoi usare la funzione JavaScript encodeURIComponent per la codifica o farlo manualmente tramite lo strumento alla fine della sezione.
Esempio
Considera una query di esempio per Fogli Google (ricorda che gli identificatori di colonna sono sempre lettere. I nomi delle colonne non sono identificatori durante la pubblicazione. Gli identificatori di colonna devono essere utilizzati nella query)
Dopo la codifica, la richiesta sarà simile a questa:
select% 20A% 2C% 20sum (B)% 20group% 20 per% 20A
Supponiamo che l'indirizzo della Data Table sia il seguente:
http://spreadsheets.google.com/a/google.com/tq?key=ABCDE
Aggiungi un parametro di richiesta & tq = TUA_STRINGA_QUERY al collegamento alla tabella e ottenere la stringa di query pronta
http://spreadsheets.google.com/a/google.com/tq?key=ABCDE&tq=select%A%2C%20sum(B)%20group%20by%20A

Sintassi della lingua

Panoramica

Il mio linguaggio di query è molto simile a SQL. Tuttavia, ci sono alcune specifiche che devono essere prese in considerazione.
Tabella dati
Questo documento contiene il termine "Tabella dati" per fare riferimento ai risultati di una query. La tabella è composta da righe e colonne. Ogni colonna ha le seguenti proprietà:
  • ID (o ID colonna)... Usato per fare riferimento alle colonne di una tabella. Tieni presente che devi solo fare riferimento a una colonna per identificatore. Trucco: cerca di non utilizzare spazi negli identificatori, questo può causare difficoltà nella modifica della richiesta. Inoltre, tutti gli identificatori con spazi devono essere racchiusi tra apici inversi.
  • Etichetta... Questa è la stringa che in genere viene mostrata agli utenti finali. Ad esempio, una legenda in un grafico a torta o il titolo di un grafico a tabella. Non applicabile per la funzione QUERY () in Fogli Google.
  • Tipi di dati... Sono supportati i seguenti tipi di dati: stringa, numero, booleano, data (data), data e ora (datetime), ora (timeofday). Tutti i valori in una colonna saranno del tipo di dati di quella colonna o null. Questi tipi di dati sono molto simili ai tipi JavaScript, non identici. Questi sono descritti nella sezione Letterali.
  • Modelli di formattazione... Le tabelle di dati possono supportare modelli di formattazione per tutte o alcune delle colonne. Questi sono descritti nella sezione Formattazione.
Tabella dati utilizzata in tutti gli esempi
In questo documento, gli esempi utilizzano una tabella con i seguenti dati e tipi di colonne:
nome
corda
Dipartimento
corda
ora di pranzo
ora del giorno

Stipendio
numero

data di assunzione
Data
età
numero
èSenior
booleano
anzianitàStartTime
appuntamento
John ita 12:00:00 2005-03-19 35 vero 2007-12-02 15:56:00
dave ita 12:00:00 2006-04-19 27 falso nullo
sortita ita 13:00:00 2005-10-10 30 falso nullo
Ben Saldi 12:00:00 2002-10-10 32 vero 2005-03-09 12:30:00
Dana Saldi 12:00:00 2004-09-08 25 falso nullo
Mike Marketing 13:00:00 2005-01-10 24 vero 2007-12-30 14:40:00

Operatori linguistici

Il linguaggio di query è costituito dai seguenti operatori, costituiti da una o due parole. Gli operatori devono seguirsi nell'ordine indicato nella tabella:
Operatore Utilizzo
Selezionare Seleziona quali colonne e in quale ordine verranno restituite. Se l'operatore viene omesso, verranno restituite tutte le colonne della tabella.
Restituisce solo le righe della tabella che corrispondono alla condizione. Se l'operatore viene omesso, verranno restituite tutte le righe della tabella.
raggruppare per Raggruppa i valori per riga.
perno Converte i valori univoci nelle colonne in nuove colonne, in modo simile a una tabella pivot.
ordinato da Ordina le stringhe in base ai valori.
limite Imposta il limite di righe che verranno restituite.
compensare Salta il numero di righe specificato dall'output.
etichetta Imposta le etichette delle colonne.
formato Formatta i valori nelle colonne specificate in base ai modelli di formattazione.
opzioni Imposta parametri aggiuntivi.
a partire dal L'operatore from non viene utilizzato.
Selezionare
L'istruzione select specifica quali colonne devono essere restituite e in quale ordine. Se non viene specificato alcun operatore o se viene specificato *, tutte le colonne della tabella verranno restituite nell'ordine originale. È possibile fare riferimento alle colonne tramite identificatori, ma non tramite etichette. Gli identificatori in Fogli Google sono nomi di colonna di una o due lettere (A, B, C, ..., AC, ..., DC, ...).
I parametri dell'operatore possono essere identificatori di colonna, funzioni aggregate, funzioni scalari o operatori aritmetici.
Esempi:
Selezionare *
seleziona reparto, stipendio
seleziona massimo (stipendio)
indirizzo emailData):

Otteniamo il risultato:
ora di pranzo nome
12:00:00 John
12:00:00 dave
13:00:00 sortita
12:00:00 Ben
12:00:00 Dana
13:00:00 Mike
La clausola where viene utilizzata per restituire solo le righe che soddisfano le condizioni.
Gli operatori di confronto semplici vengono utilizzati per descrivere le condizioni<=, <, >, >=, =, !=, <>... Entrambi gli operatori! =,<>Significare non uguale... Le stringhe vengono confrontate per il loro significato lessicografico. Nota, l'uguaglianza viene verificata tramite l'operatore =, non tramite == come in molte lingue... Il confronto con null viene eseguito tramite è null e non è null. Quando si utilizza QUERY () in Fogli Google, è comune che il campo stringa sia vuoto "", non null.
Puoi combinare più condizioni usando gli operatori booleani e, or, not. Le parentesi vengono utilizzate per definire la precedenza esplicita.

La clausola where utilizza anche operatori aggiuntivi per confronti di stringhe più complessi. Questi operatori accettano due argomenti, che devono essere stringhe, qualsiasi argomento non stringa (data, numero) verrà convertito in una stringa prima del confronto. Il confronto fa distinzione tra maiuscole e minuscole (per smussare questa funzionalità, utilizzare le funzioni scalari upper(), lower()).
contiene - corrisponde a una sottostringa. L'espressione restituirà vero se una parte della stringa corrisponde completamente all'argomento dato - una sottostringa. Ad esempio, dove il nome contiene "John" verrà restituito "John", "John Adams", "Long John Silver" ma no "giovanni adams".

Esempi:
Selezionare *
seleziona reparto, stipendio
seleziona massimo (stipendio)
L'esempio seguente mostra l'uso di identificatori di riferimento con spazi ( indirizzo email) e identificatori che corrispondono ai nomi delle parole riservate ( Data):
seleziona `indirizzo email`, nome,` data`
Applichiamo la seguente query alla tabella dell'esempio:
Otteniamo il risultato:
ora di pranzo nome
12:00:00 John
12:00:00 dave
13:00:00 sortita
12:00:00 Ben
12:00:00 Dana
13:00:00 Mike
risorsa mysql_query(interrogazione stringa [, identificatore_collegamento risorsa])

mysql_query() invia una richiesta al database attivo del server a cui fa riferimento il puntatore passato. Se link_identifier viene omesso, viene utilizzata l'ultima connessione aperta. Se non ci sono connessioni aperte, la funzione tenta di connettersi al DBMS, in modo simile alla funzione mysql_connect() nessun parametro. Il risultato della query viene memorizzato nel buffer.

Commento: La stringa di query NON deve terminare con un punto e virgola.

Solo per le query SELECT, SHOW, EXPLAIN, DESCRIBE, mysql_query() restituisce un puntatore al risultato della query, oppure FALSO se la richiesta non è stata completata.
Negli altri casi (INSERT, UPDATE, DELETE, DROP, ecc.), mysql_query() ritorna VERO in caso di esito positivo della richiesta e FALSO in caso di errore. Il valore non è uguale FALSO indica che la richiesta è stata completata con successo. Non parla del numero di righe interessate o restituite. È del tutto possibile che una richiesta andata a buon fine non influisca su nessuna riga.

La seguente query non è corretta e mysql_query() tornerà FALSO :

mysql_query()è anche considerato errato e tornerà FALSO se non si dispone di diritti sufficienti per lavorare con la tabella specificata nella query.

Quando si lavora con i risultati della query, è possibile utilizzare la funzione mysql_num_rows () per trovare il numero di righe restituite da una query SELECT, oppure mysql_affected_rows () per trovare il numero di righe elaborate dalle query DELETE, INSERT, REPLACE o UPDATE.

Solo per query SELECT, SHOW, DESCRIBE, EXPLAIN, function mysql_query() restituisce un puntatore al risultato che può essere utilizzato in una funzione mysql_fetch_array () e altre funzioni che funzionano con i risultati delle query. Quando hai finito di lavorare con il risultato, puoi liberare le risorse utilizzate per memorizzarlo usando la funzione

Nota: Sovrastruttura Query di potenza offerto in Excel 2016 come gruppo di comandi Scarica e converti... Le informazioni in questo articolo si applicano sia a Power Query che al nuovo gruppo. Per ulteriori informazioni, vedere Download e conversione in Excel 2016.

In Power Query, un'operazione Aggiungere crea una nuova query contenente tutte le righe della prima query e quindi tutte le righe della seconda query.

Nota di sicurezza: Livelli di privacy prevenire l'aggregazione accidentale di dati da più fonti, che possono essere private o organizzative. Con alcune query, l'utente può inviare inavvertitamente dati da un'origine dati privata a un'altra origine. Gli aggressori possono sfruttare questa opportunità. Power Query analizza ogni origine dati e ne determina il livello di privacy: pubblico, organizzativo e privato. Per ulteriori informazioni sui livelli di privacy, vedere Livelli di privacy.

Aggiunta in corso

È possibile eseguire due tipi di operazioni di aggiunta: addizione intermedia o aggiunta in linea... Usando addizione intermedia viene creata una nuova query per ogni operazione di aggiunta. In aggiunta in linea aggiungi dati a una query esistente fino a raggiungere il risultato finale. Il risultato è un nuovo passaggio alla fine della query corrente.

Aggiunta in linea

Addizione intermedia


Guarda anche:

Nota: Editor di query visualizzato solo durante il caricamento, la modifica o la creazione di una nuova richiesta con Query di potenza... Il video mostra una finestra editor di query che appare dopo aver modificato una query in una cartella di lavoro di Excel. Vedere editor di query senza scaricare o modificare una query esistente nella cartella di lavoro, nella sezione Ottenere dati esterni sulla scheda della barra multifunzione Query di potenza scegliere Da altre fonti> Query vuota... Il video mostra uno dei metodi di visualizzazione editor di query.

Abbiamo imparato a connetterci al server MySQL, abbiamo scelto un database con cui lavorare, abbiamo imparato la funzione PHP di inviare query al server MySQL, abbiamo imparato due semplici query (creazione ed eliminazione di una tabella) e abbiamo imparato a chiudere la connessione.

Ora approfondiremo le query MySQL. Quindi iniziamo!

Creazione di una tabella - CREA TABELLA

Ora abbiamo un database vuoto, non ci sono tabelle al suo interno. Quindi creiamo prima una tabella. Sappiamo già come farlo dalla prima parte.

Ecco il codice dello script che creerà la piastra di cui abbiamo bisogno:

$ link = mysqli_connect ("localhost", "root", "", "tester"); if (! $ link) die ("Errore"); $ query = "CREATE TABLE utenti (login VARCHAR (20), password VARCHAR (20))"; if (mysqli_query ($ link, $ query)) echo "La tabella è stata creata."; else echo "Tabella non creata:" .mysqli_error (); mysqli_close ($ collegamento);

Ci sono solo due campi nella nostra tabella: login e password. Per ora non ci serve altro, non complichiamo il processo.

Quindi, la tabella è stata creata.

Aggiunta di righe (record) a una tabella - INSERT

Puoi aggiungere una nuova riga a una tabella utilizzando il comando di inserimento SQL. Ecco un esempio:

$ link = mysqli_connect ("localhost", "root", "", "tester"); if (! $ link) die ("Errore"); $ query = "INSERT INTO utenti (login, password) VALUE (" zeus "," pass123 ")"; if (mysqli_query ($ link, $ query)) echo "L'utente è stato aggiunto."; else echo "Nessun utente aggiunto:". mysqli_error (); mysqli_close ($ collegamento);

La query SQL è composta dal comando INSERT INTO, dal nome del database utenti, quindi dai nomi dei campi tra parentesi, quindi dalla parola VALUE, seguita dai valori aggiunti tra parentesi. I valori sono citati.

La sintassi per la richiesta è simile a questa:

INSERT INTO nome_tabella (colonna1, colonna2) VALUE ("x1", "x2")

Le virgolette nella seconda parentesi sono obbligatorie.

Le variabili possono essere al posto dei valori. Ecco un esempio:

$ link = mysqli_connect ("localhost", "root", "", "tester"); if (! $ link) die ("Errore"); $ login = "zeus"; $ password = "pass123"; $ query = "INSERT INTO utenti (login, password) VALUE (" $ login "," $ password ")"; if (mysqli_query ($ link, $ query)) echo "L'utente è stato aggiunto."; else echo "Nessun utente aggiunto:". mysqli_error (); mysqli_close ($ collegamento);

Ovviamente questo esempio ha poco senso. Può essere utile per i principianti sapere che questo è il modo in cui i login e le password forniti dagli utenti durante la registrazione vengono registrati nel database. Questi dati vengono memorizzati in variabili, quindi, dopo la verifica, vengono scritti nel database.

Esiste un modo rapido per inserire più righe con una query INSERT:

INSERIRE NEGLI utenti (login, password) VALUE ("bob", "eee333"), ("Rooki", "12345"), ("magy", "olol88e8")

Come puoi vedere, i dati enumerati sono semplicemente separati da virgole.

Quindi, usando il comando INSERT, abbiamo imparato come aggiungere record a una tabella. Vai avanti.

Vista tabella: comando SELECT

Ora abbiamo una tabella utenti con righe. Lo script precedente può essere eseguito più volte e ogni volta aggiungerà una riga alla tabella. Ora potremmo non sapere quante righe abbiamo nella tabella. E voglio sapere cosa c'è scritto dentro.

Per recuperare i dati da una tabella, utilizzare il comando SQL SELECT. Il segno * significa che stiamo richiedendo tutti i dati, quindi dopo la parola FROM scriviamo il nome della tabella da cui vogliamo ricevere i dati.

Interroga tutti i dati dalla tabella utenti:

$ link = mysqli_connect ("localhost", "root", "", "tester"); if (! $ link) die ("Errore"); $ query = "SELEZIONA * DA utenti"; $ risultato = mysqli_query ($ link, $ query); if (! $ risultato) echo "Si è verificato un errore:". mysqli_error (); else echo "Dati ricevuti"; mysqli_close ($ collegamento);

La funzione mysqli_query() ci ha restituito l'identificatore del risultato della query: lo inseriamo in una variabile e in futuro lavoreremo con esso utilizzando altre funzioni PHP.

Numero di record nella richiesta

Scopriamo quante righe ci sono nella nostra query? Ho eseguito personalmente lo script per aggiungere un record alla tabella, non ricordo quante volte e ora non so quante righe ci sono nella mia tabella.

La funzione mysqli_num_rows() viene utilizzata per determinare il numero di righe nel risultato della query. A questa funzione viene passato l'identificatore del risultato della query e restituirà il numero di record.

$ link = mysqli_connect ("localhost", "root", "", "tester"); if (! $ link) die ("Errore"); $ query = "SELEZIONA * DA utenti"; $ risultato = mysqli_query ($ link, $ query); if (! $ risultato) echo "Si è verificato un errore:". mysqli_error (); else echo "Dati ricevuti"; $ count = mysqli_num_rows ($ risultato); echo "Righe totali nella tabella: $ count."; mysqli_close ($ collegamento);

Se abbiamo bisogno di scoprire il numero di record in una tabella, il metodo indicato non è il più adatto. Qui abbiamo scoperto il numero di record trovati nella query, ma il numero di record nella tabella viene cercato in modo diverso.

Numero di record nella tabella SELECT COUNT (*)

Per scoprire il numero di record in una tabella, puoi utilizzare il comando SELECT COUNT (*) FROM nome_tabella.

$ link = mysqli_connect ("localhost", "root", ""); if (! $ link) die ("Errore"); mysqli_select_db ("tester"); $ query = "SELEZIONA * DA utenti"; $ risultato = mysqli_query ($ link, $ query); if (! $ risultato) echo "Si è verificato un errore:". mysqli_error (); else echo "Dati ricevuti."; $ count = mysqli_fetch_row ($ risultato); echo "Righe totali nella tabella: $ count."; mysqli_close ($ collegamento);

Nota che qui abbiamo usato la nuova funzione PHP mysqli_fetch_row() per recuperare i dati. Questa funzione restituisce una riga del risultato della query sotto forma di un semplice array, nel nostro caso c'è un campo nella riga e ha indice 0.

Visualizzazione del risultato di una query in un ciclo

Dopo aver eseguito una query SQL con un comando SELECT e ottenuto l'identificatore del risultato della query, PHP crea un puntatore interno nel recordset del risultato. Questo puntatore si sposta automaticamente al record successivo dopo aver fatto riferimento al record corrente. Questo meccanismo semplifica il ciclo del set di risultati di una query SELECT.

PHP ha diverse funzioni che possono essere utilizzate per ottenere un array di campi per ogni riga della query risultante. Prendiamo come esempio la funzione mysqli_fetch_row(). A questa funzione viene passato l'ID richiesta e restituisce un array. Quindi nel ciclo viene scansionato l'intero risultato della query; al raggiungimento della fine del risultato della query, la funzione restituirà false.

Quindi, interroghiamo tutti i dati dalla tabella utenti (SELECT * FROM utenti).


"; while ($ riga = mysqli_fetch_row ($ risultato)) (echo" Login: $ riga. Password: $ riga.
";) mysqli_close ($ link);

Mysqli_fetch_row() restituisce un semplice array. Ad ogni iterazione del ciclo, riceveremo un array con una riga della tabella, ai cui campi possiamo accedere specificando un indice numerico.

Lo stesso può essere fatto usando la funzione mysql_fetch_assoc(), restituisce un array associativo.

$ link = mysqli_connect ("localhost", "root", ""); if (! $ link) die ("Errore"); mysqli_select_db ("tester"); $ risultato = mysqli_query ($ link, "SELECT * FROM utenti"); if (! $ risultato) echo "Si è verificato un errore:". mysqli_error (); else echo "Dati ricevuti.
"; while ($ riga = mysqli_fetch_assoc ($ risultato)) (echo" Login: $ riga. Password: $ riga.
";) mysqli_close ($ link);

Esistono anche funzioni mysqli_fetch_array() - restituisce qualsiasi tipo di array e mysqli_fetch_object() - restituisce un oggetto.

SELECT DISTINCT Query - Valori di campo univoci

Creiamo una nuova tabella:

$ link = mysqli_connect ("localhost", "root", ""); if (! $ link) die ("Errore"); mysqli_select_db ("tester"); // elimina la tabella esistente mysqli_query ($ link, "DROP TABLE users"); // crea una nuova tabella $ query = "CREATE TABLE utenti (nome VARCHAR (20), cognome VARCHAR (20), età TINYINT UNSIGNED)"; if (mysqli_query ($ link, $ query)) echo "La tabella è stata creata.
"; else echo" Tabella non creata: ". mysqli_error (); // funzione per aggiungere record alla funzione della tabella add_new_line ($ link, $ query) (if (! mysqli_query ($ link, $ query)) echo" Utente no aggiunto : ". mysqli_error ();) // aggiungi record add_new_line ($ link," INSERT INTO users (nome, cognome, età) VALUE ("Max", "Jayson", "33") "); add_new_line ($ link , "INSERT INTO users (nome, cognome, età) VALUE (" Bob "," Freeman "," 26 ")"); add_new_line ($ link, "INSERT INTO users (nome, cognome, età) VALUE (" Sara " , "Lopes", "65") "); add_new_line ($ link," INSERT INTO utenti (nome, cognome, età) VALUE ("Serg", "Pupin", "29") "); add_new_line ($ link, " INSERT INTO utenti (nome, cognome, età) VALUE ("Serg", "Borman", "43") "); add_new_line ($ link," INSERT INTO utenti (nome, cognome, età) VALUE ("Max", " Lopes "," 21 ")"); // visualizza il contenuto della tabella nel browser $ risultato = mysqli_query ($ link, "SELECT * FROM utenti"); if (! $ Risultato) echo "Si è verificato un errore: ". Mysqli_error (); else echo "Dati ricevuti.
"; while ($ riga = mysqli_fetch_assoc ($ risultato)) (echo" Nome: $ riga. Cognome: $ riga. Età: $ riga.
";) mysqli_close ($ link);

Quindi, abbiamo una nuova tabella più complessa con record univoci. Ora vediamo quanti nomi abbiamo nel database.

$ link = mysqli_connect ("localhost", "root", ""); if (! $ link) die ("Errore"); mysqli_select_db ("tester"); $ risultato = mysqli_query ($ link, "SELECT DISTINCT name FROM users"); echo "Nomi totali:". mysqli_num_rows ($ risultato). "
"; echo" Elenco dei nomi:
"; while ($ nome = mysqli_fetch_row ($ risultato)) (echo" $ nome
";) mysqli_close ($ link);

La query SQL "SELECT DISTINCT name FROM users" ha restituito un risultato con tutti i nomi univoci nella nostra tabella. Ogni nome univoco su una nuova riga nel risultato della query.

Ordinamento del risultato - ORDINA PER

Aggiungendo il comando ORDER BY alla query SQL, ordiniamo il risultato della query in ordine crescente (numeri e lettere in ordine alfabetico). Ecco un esempio in cui puoi confrontare una query normale e ordinarla per età (campo età).



";) echo" Ordina per età:
"; $ risultato = mysqli_query ($ link," SELECT * FROM utenti ORDINA PER età "); while ($ riga = mysqli_fetch_row ($ risultato)) (echo" Nome: $ riga. Cognome: $ riga. Età: $ linea.
";) mysqli_close ($ link);

Puoi sostituire il campo età nel comando ORDER BY con il campo nome e vedere il risultato.

Per ordinare il risultato della query in ordine inverso, utilizzare il comando ORDER BY age DESC.

Condizione corrispondente - DOVE

Aggiungendo il comando WHERE alla query SQL, interrogheremo solo i record che corrispondono alla condizione. Ad esempio, facciamo una richiesta per le persone sotto i 30 anni.

Per fare ciò, usa la query SQL "SELECT * FROM users WHERE age

$ link = mysqli_connect ("localhost", "root", ""); if (! $ link) die ("Errore"); mysqli_select_db ("tester"); echo "Persone sotto i 30 anni:
"; $ risultato = mysqli_query ($ link," SELECT * FROM utenti WHERE età<30"); while ($line = mysqli_fetch_row($result)) { echo "Имя: $line. Фамилия: $line. Возраст: $line.
";) mysqli_close ($ link);

Possiamo anche ordinare immediatamente il risultato in ordine crescente per età:
"SELECT * FROM utenti WHERE età<30 ORDER BY age ".

Se effettuiamo la query "SELECT name FROM users WHERE age<30 ORDER BY age ", то в результате нам вернут только значения поля "name", но они также будут отсортированы по age.

Possiamo interrogare i valori di due campi: "SELECT nome, età FROM utenti WHERE età

Ora chiedi a tutti gli utenti denominati "Max".

$ link = mysqli_connect ("localhost", "root", ""); if (! $ link) die ("Errore"); mysqli_select_db ("tester"); echo "Tutto massimo:
"; $ risultato = mysqli_query ($ link," SELECT * FROM utenti WHERE nome = "Max" "); while ($ riga = mysqli_fetch_row ($ risultato)) (echo" Nome: $ riga. Cognome: $ riga. Età: linea $.
";) mysqli_close ($ link);

E un altro esempio di query: selezionerà solo i nomi dalla tabella utenti, tutto tranne Max.

SELECT nome FROM utenti WHERE nome! = "Max"

Questo è tutto con la clausola WHERE.

Record di limitazione - LIMIT

Aggiungendo il comando LIMIT alla query SQL, limiteremo la dimensione del risultato.

Una query che stampa i primi tre record: "SELECT * FROM users LIMIT 3". Vediamo come funziona:

$ link = mysqli_connect ("localhost", "root", ""); if (! $ link) die ("Errore"); mysqli_select_db ("tester"); echo "Contenuto della tabella:
"; $ risultato = mysqli_query ($ link," SELECT * FROM utenti "); while ($ riga = mysqli_fetch_row ($ risultato)) (echo" Nome: $ riga. Cognome: $ riga. Età: $ riga.
";) eco"

Le prime tre voci:
"; $ risultato = mysqli_query ($ link," SELECT * FROM utenti LIMIT 3 "); while ($ riga = mysqli_fetch_row ($ risultato)) (echo" Nome: $ riga. Cognome: $ riga. Età: $ riga .
";) eco"

Seconde tre voci:
"; $ risultato = mysqli_query ($ link," SELECT * FROM utenti LIMIT 3, 3 "); while ($ riga = mysqli_fetch_row ($ risultato)) (echo" Nome: $ riga. Cognome: $ riga. Età: $ riga...
";) mysqli_close ($ link);

Anche qui abbiamo usato la query: "SELECT * FROM users LIMIT 3, 3". La seconda tripla indica l'offset nel risultato della query.

Abbinamento dei modelli - LIKE

Il linguaggio SQL supporta modelli semplici. Per questo, viene utilizzato il comando LIKE e il modello viene specificato utilizzando il carattere%.

Ecco una query di esempio che restituirà tutti i record con nomi che iniziano con la lettera S.

SELECT * FROM utenti WHERE nome LIKE "S%"

Testare la richiesta:

$ link = mysqli_connect ("localhost", "root", ""); if (! $ link) die ("Errore"); mysqli_select_db ("tester"); echo "Contenuto della tabella:
"; $ risultato = mysqli_query ($ link," SELECT * FROM utenti "); while ($ riga = mysqli_fetch_row ($ risultato)) (echo" Nome: $ riga. Cognome: $ riga. Età: $ riga.
";) eco"

Nomi che iniziano con S:
"; $ risultato = mysqli_query ($ link," SELECT * FROM utenti WHERE nome LIKE "S%" "); while ($ riga = mysqli_fetch_row ($ risultato)) (echo" Nome: $ riga. Cognome: $ riga Età: $ linea.
";) mysqli_close ($ link);

Ecco una query di esempio che restituirà tutti i record con cognomi che terminano con la lettera s.

SELECT * FROM utenti WHERE nome LIKE "% s"

Corrispondenza con la condizione - IN

Questa query che utilizza il comando IN restituirà solo le righe che corrispondono strettamente alla condizione.

Ad esempio, siamo interessati alle persone di 21, 26 e 33 anni.

SELEZIONA * FROM utenti DOVE età IN (21,26,33)

Testare la richiesta:

$ link = mysqli_connect ("localhost", "root", ""); if (! $ link) die ("Errore"); mysqli_select_db ("tester"); echo "Contenuto della tabella:
"; $ risultato = mysqli_query ($ link," SELECT * FROM utenti "); while ($ riga = mysqli_fetch_row ($ risultato)) (echo" Nome: $ riga. Cognome: $ riga. Età: $ riga.
";) eco"

Persone con le età richieste (21, 26, 33):
"; $ risultato = mysqli_query ($ link," SELECT * FROM utenti WHERE età IN (21, 26, 33) "); while ($ riga = mysqli_fetch_row ($ risultato)) (echo" Nome: $ riga. Cognome : riga $ Età: riga $.
";) mysqli_close ($ link);

Valore massimo e minimo in una colonna

Seleziona il valore massimo di età nella tabella utenti.

SELECT max (età) FROM utenti

La query seguente seleziona i dati dalla tabella utenti utilizzando i campi nome ed età, dove età è il valore minimo.

SELEZIONA nome, min (età) FROM utenti

Aggiornamento di un record - AGGIORNAMENTO

Impostiamo Max Lopes a 15 anni. Questo viene fatto con una query MySQL:

AGGIORNA utenti SET età = "15" WHERE nome = "Max" AND cognome = "Lopes"

Notare il nuovo comando AND (e - in inglese significa "e") nella query. Se non specifichiamo il cognome, allora verrà impostata l'età di 15 anni per tutti i Max nella tabella.

Una query può aggiornare due o più campi in una riga. Questo viene fatto come segue:

AGGIORNA utenti SET età = "18", cognome = "Coocker" WHERE id = "3"

La nostra tabella non ha un campo ID, quindi questa query non funzionerà su di essa. Ma impareremo sicuramente questo campo che contiene numeri di riga univoci.

Elimina record - ELIMINA

Query del database MySQL per eliminare un record:

DELETE FROM utenti WHERE id = "10"

Ancora una volta, non c'è alcun campo ID nella nostra tabella. Ma possiamo rimuovere da esso tutte le persone di età inferiore ai 18 anni.

ELIMINA DA utenti WHERE età< "18"

TABELLA DROP

Query del database MySQL che elimina l'intera tabella degli utenti:

DROP TABLE utenti

Eliminazione di una colonna - ALTER TABLE... DROP...

A volte potrebbe essere necessario eliminare una colonna da una tabella, ad esempio rimuoviamo la colonna età dagli utenti:

Gli utenti ALTER TABLE DROP age

Questa query MySQL ha eliminato la colonna in modo permanente e irrevocabile.

Aggiungi colonna - ALTER TABLE ... AGGIUNGI ...

A volte potresti voler aggiungere una colonna a una tabella esistente, ad esempio aggiungiamo di nuovo la colonna età alla tabella utenti:

ALTER TABLE utenti AGGIUNGI età TINYINT UNSIGNED

Rinomina colonna - ALTER TABLE ... CAMBIA ...

A volte potrebbe essere necessario rinominare una colonna, ad esempio rinominare la colonna dell'età in vozrast. Lo facciamo così:

ALTER TABLE utenti CAMBIA età vozrast TINYINT UNSIGNED

Questa query MySQL ha rinominato la colonna dell'età in vozrast con il tipo di dati TINYINT UNSIGNED.

Rinominare una tabella - RENAME TABLE ... TO ...

A volte potrebbe essere necessario rinominare una tabella:

RINOMINA gli utenti della TABELLA in popoli

Eliminazione di un database - ELIMINA DATABASE

Questa query può eliminare il database con il tester del nome:

DROP DATABASE tester

Creazione di un database - CREA DATABASE

Questa query crea un database denominato tester:

CREA DATABASE tester

Questa richiesta funziona per me su Denver, ma sull'hosting potrebbe non funzionare se l'utente del database non dispone dell'autorizzazione per eseguire la cancellazione.

Risultati

Quindi, in questa parte abbiamo fatto conoscenza con le query a MySQL. Molte delle richieste che abbiamo considerato non ci sono spesso utili nel processo di lavoro, ma è necessario conoscerle, poiché torneranno sicuramente utili nel processo di sviluppo degli script.

Alcune richieste vengono solitamente effettuate solo da phpMyAdmin (creazione ed eliminazione di database ad esempio).

Nel lavoro dei siti, di solito è necessario aggiungere un record a una tabella, modificare un record o eliminare un record da una tabella.

Il prossimo passo è esplorare i tipi di dati MySQL.