Päringud mysql-is php mysqli päringust. Andmebaasipäringute saatmine PHP-s. SQL päringuplaan funktsioonis Päring

Õppisime MySQL-i serveriga ühenduse loomist, töötamiseks kasutatava andmebaasi valimist, PHP-funktsiooni päringute saatmiseks MySQL-serverisse, õppisime kahte lihtsat päringut (tabeli loomine ja kustutamine) ning ühenduse sulgemist.

Nüüd sukeldume sügavamale MySQL-i päringutesse. Nii et alustame!

Tabeli koostamine - CREATE TABLE

Nüüd on meil tühi andmebaas, selles pole ühtegi tabelit. Nii et kõigepealt loome tabeli. Teame juba esimesest osast, kuidas seda teha.

Siin on skriptikood, mis loob meile vajaliku märgi:

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Viga"); $query = "LOO TABLE kasutajad(login VARCHAR(20), parool VARCHAR(20))"; if (mysqli_query($link, $query)) echo "Tabel on loodud."; else echo "Tabelit ei loodud: ".mysqli_error(); mysqli_close($link);

Meie tabelis on ainult kaks välja: sisselogimine ja parool. Praegu me rohkem ei vaja, ärgem tehkem protsessi keerulisemaks.

Niisiis, tabel on loodud.

Tabeli ridade (kirjete) lisamine - INSERT

Tabelisse saab lisada uue rea, kasutades SQL-i sisestamise käsku. Siin on näide:

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Viga"); $query = "INSERT INTO kasutajad (sisselogimine, parool) VALUE ("zeus", "pass123")"; if (mysqli_query($link, $query)) echo "Kasutaja lisatud."; else echo "Kasutajat pole lisatud: " . mysqli_error(); mysqli_close($link);

SQL-päring koosneb käsust INSERT INTO, andmebaasi nimedest kasutajad, seejärel sulgudes olevatest väljade nimedest, seejärel sõnast VALUE, millele järgneb sulgudes lisatavad väärtused. Väärtused on toodud jutumärkides.

Taotluse süntaks näeb välja selline:

INSERT INTO tabeli_nimi (veerg1, veerg2) VALUE ("x1", "x2")

Teistes sulgudes olevad tsitaadid on kohustuslikud.

Väärtuste asemel võivad olla muutujad. Siin on näide:

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Viga"); $login = "zeus"; $parool = "pass123"; $query = "INSERT INTO kasutajad (login, parool) VALUE ("$sisselogimine", "$parool")"; if (mysqli_query($link, $query)) echo "Kasutaja lisatud."; else echo "Kasutajat pole lisatud: " . mysqli_error(); mysqli_close($link);

Muidugi on sellel näitel vähe mõtet. Algajatele võib olla kasulik kuulda, et nii salvestatakse andmebaasi sisselogimised ja paroolid, mille kasutajad registreerimisel annavad. Need andmed salvestatakse muutujatena ja kirjutatakse pärast kontrollimist andmebaasi.

Mitme rea lisamiseks ühe INSERT-lausega on kiire viis:

SISESTAGE kasutajaid (sisselogimine, parool) VALUE ("bob", "eee333"), ("Rooki", "12345"), ("magy", "olol88e8")

Nagu näete, eraldatakse loetletud andmed lihtsalt komadega.

Niisiis, kasutades käsku INSERT, õppisime, kuidas tabelisse kirjeid lisada. Lase käia.

Vaata tabelit: SELECT käsk

Nüüd on meil kasutajate tabel, millel on read. Eelmist skripti saab käivitada mitu korda ja iga kord lisab see tabelisse rea. Nüüd ei pruugi me teada, mitu rida meil tabelis on. Ja ma tahan teada, mida me sinna kirjutanud oleme.

Tabelist andmete toomiseks kasutage käsku SELECT SQL. Märk * tähendab, et me küsime kõiki andmeid, seejärel kirjutame sõna FROM järele selle tabeli nime, millest soovime andmeid saada.

Küsime kasutajate tabelist kõiki andmeid:

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Viga"); $query = "SELECT * FROM kasutajad"; $tulemus = mysqli_query($link, $päring); if (!$result) echo "Tekkis viga: " . mysqli_error(); else echo "Andmed vastu võetud"; mysqli_close($link);

Funktsioon mysqli_query() tagastas meile päringutulemuse identifikaatori – paneme selle muutujasse ja töötame sellega hiljem teiste PHP funktsioonide abil.

Taotluses olevate kirjete arv

Teeme kindlaks, mitu rida meie päringus on? Käivitasin tabelisse kirje lisamise skripti, ma ei mäleta mitu korda ja nüüd ma ei tea, mitu rida minu tabelis on.

Päringu tulemuse ridade arvu määramiseks kasutage funktsiooni mysqli_num_rows(). See funktsioon edastab päringutulemuse identifikaatori ja see tagastab kirjete arvu.

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Viga"); $query = "SELECT * FROM kasutajad"; $tulemus = mysqli_query($link, $päring); if (!$result) echo "Tekkis viga: " . mysqli_error(); else echo "Andmed vastu võetud"; $count = mysqli_num_rows($result); echo "Tabeli ridu kokku: $count."; mysqli_close($link);

Kui meil on vaja välja selgitada tabelis olevate kirjete arv, siis ülaltoodud meetod ei ole kõige sobivam. Siin saime teada päringust leitud kirjete arvu, kuid tabelis olevate kirjete arvu otsitakse erinevalt.

Kirjete arv tabelis SELECT COUNT(*)

Tabeli kirjete arvu teadasaamiseks saab kasutada käsku SELECT COUNT(*) FROM tabeli_nimi.

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Viga"); mysqli_select_db("testija"); $query = "SELECT * FROM kasutajad"; $tulemus = mysqli_query($link, $päring); if (!$result) echo "Tekkis viga: " . mysqli_error(); else echo "Andmed vastu võetud."; $count = mysqli_fetch_row($tulemus); echo "Tabeli ridu kokku: $count."; mysqli_close($link);

Pange tähele, et siin kasutasime andmete toomiseks uut PHP funktsiooni mysqli_fetch_row(). See funktsioon tagastab päringutulemuse rea lihtsa massiivi kujul; meie puhul on real üks väli ja selle indeks on 0.

Päringu tulemuse vaatamine tsüklina

Pärast SQL-päringu täitmist käsuga SELECT ja päringutulemuse ID saamist loob PHP tulemuste kirjekomplekti sisemise osuti. See kursor liigub pärast praegusele kirjele juurdepääsu automaatselt järgmisele kirjele. See mehhanism muudab SELECT-päringu tulemuste komplekti sirvimise väga mugavaks.

PHP-l on mitu funktsiooni, mille abil saate saadud päringu iga rea ​​jaoks saada massiivi, mis koosneb selle väljadest. Võtame näiteks funktsiooni mysqli_fetch_row(). See funktsioon edastab päringu identifikaatori ja tagastab massiivi. Seega vaadatakse tsüklis kogu päringutulemust ja kui päringutulemuse lõppu jõutakse, tagastab funktsioon väärtuse false .

Niisiis, me küsime kõiki andmeid kasutajate tabelist (SELECT * FROM kasutajad).


"; while ($row = mysqli_fetch_row($result)) ( echo "Logi sisse: $rida. Parool: $rida.
"; ) mysqli_close($link);

Funktsioon mysqli_fetch_row() tagastab lihtsa massiivi. Igas tsükli iteratsioonis saame tabelist reaga massiivi, mille väljadele pääseme ligi numbrilise indeksi määramisega.

Sama saab teha funktsiooni mysql_fetch_assoc() abil, see tagastab assotsiatiivse massiivi.

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Viga"); mysqli_select_db("testija"); $result = mysqli_query($link, "SELECT * FROM kasutajad"); if (!$result) echo "Tekkis viga: " . mysqli_error(); else echo "Andmed on vastu võetud.
"; while ($row = mysqli_fetch_assoc($result)) ( echo "Logi sisse: $rida. Parool: $rida.
"; ) mysqli_close($link);

Samuti on funktsioonid mysqli_fetch_array() - tagastab mis tahes tüüpi massiivi ja mysqli_fetch_object() - tagastab objekti.

SELECT DISTINCT päring – kordumatud välja väärtused

Loome uue tabeli:

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Viga"); mysqli_select_db("testija"); // olemasoleva tabeli kustutamine mysqli_query($link, "DROP TABLE users"); // loo uus tabel $query = "CREATE TABLE users(nimi VARCHAR(20), perekonnanimi VARCHAR(20), vanus TINYINT UNSIIGNEDATA)"; if (mysqli_query($link, $query)) echo "Tabel on loodud.
"; else echo "Tabelit ei loodud: " . mysqli_error(); // funktsioon kirjete lisamiseks tabelisse funktsioon add_new_line($link, $query) ( if (!mysqli_query($link, $query)) echo "Kasutaja ei added : " . mysqli_error(); ) // kirjete lisamine add_new_line($link, "INSERT INTO kasutajad (nimi, perekonnanimi, vanus) VALUE ("Max", "Jayson", "33")"); add_new_line($link , "INSERT INTO kasutajad (nimi, perekonnanimi, vanus) VALUE ("Bob", "Freeman", "26")"); add_new_line($link, "INSERT INTO kasutajad (nimi, perekonnanimi, vanus)) VALUE ("Sara" , "Lopes", "65")"); add_new_line($link, "INSERT INTO kasutajad (nimi, perekonnanimi, vanus)) VALUE ("Serg", "Pupin", "29")"); add_new_line($link, " INSERT INTO kasutajad (nimi, perekonnanimi, vanus) VALUE ("Serg", "Borman", "43")"); add_new_line($link, "INSERT INTO kasutajad (nimi, perekonnanimi, vanus) VALUE ("Max", " Lopes", "21")"); // kuvab tabeli sisu brauseris $result = mysqli_query($link, "SELECT * FROM users"); if (!$result) echo "Tekkis viga: " . mysqli_error(); else echo "Andmed on vastu võetud.
"; while ($row = mysqli_fetch_assoc($result)) ( echo "Eesnimi: $rida. Perekonnanimi: $rida. Vanus: $rida.
"; ) mysqli_close($link);

Niisiis, meil on uus, keerulisem unikaalsete kirjetega tabel. Nüüd vaatame, kui palju nimesid meil andmebaasis on.

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Viga"); mysqli_select_db("testija"); $result = mysqli_query($link, "SELECT DISTINCT name FROM FROM"); kaja "Nimesid kokku: " . mysqli_num_rows($result)."
"; kaja "Nimede loend:
"; while ($nimi = mysqli_fetch_row($result)) ( kaja "$nimi
"; ) mysqli_close($link);

SQL-päring "SELECT DISTINCT name FROM users" andis tulemuse kõigi meie tabelis olevate unikaalsete nimedega. Iga kordumatu nimi päringutulemuse uuel real.

Tulemuse sorteerimine - TELLI

Lisades SQL päringule käsu ORDER BY, sorteerime päringutulemuse kasvavas järjekorras (numbrid ja tähed tähestikulises järjekorras). Siin on näide, milles saate võrrelda tavapäringut ja vanuse järgi sorteeritud päringut (vanuseväli).



"; ) kaja "Sorteeri vanuse järgi:
"; $result = mysqli_query($link, "SELECT * FROM Users ORDER BY BY"); while ($line = mysqli_fetch_row($result)) ( echo "Eesnimi: $rida. Perekonnanimi: $rida. Vanus: $ rida.
"; ) mysqli_close($link);

Käskluses ORDER BY saab asendada vanusevälja nimeväljaga ja näha tulemust.

Päringu tulemuste vastupidises järjestuses sortimiseks kasutage käsku ORDER BY vanuse DESC.

Sobiv seisund – KUS

Lisades SQL-päringule käsu WHERE, esitame päringu ainult nendele kirjetele, mis vastavad tingimusele. Näiteks teeme taotluse alla 30-aastastele inimestele.

Selleks kasutame SQL-päringut "SELECT * FROM kasutajad WHERE vanusest

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Viga"); mysqli_select_db("testija"); echo "Alla 30-aastased:
"; $result = mysqli_query($link, "SELECT * FROM kasutajad WHERE vanusest<30"); while ($line = mysqli_fetch_row($result)) { echo "Имя: $line. Фамилия: $line. Возраст: $line.
"; ) mysqli_close($link);

Samuti saame tulemuse koheselt järjestada kasvavas vanuses:
" SELECT * FROM kasutajad WHERE vanuses<30 ORDER BY age ".

Kui teeme päringu " SELECT nimi FROM kasutajad WHERE vanusest<30 ORDER BY age ", то в результате нам вернут только значения поля "name", но они также будут отсортированы по age.

Saame küsida kahe välja väärtusi: " SELECT nimi, vanus FROM kasutajad WHERE vanus

Nüüd taotleme kõiki kasutajaid nimega "Max".

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Viga"); mysqli_select_db("testija"); echo "Kõik Maxid:
"; $result = mysqli_query($link, "SELECT * FROM users WHERE name="Max""); while ($line = mysqli_fetch_row($result)) ( kaja "Eesnimi: $rida. Perekonnanimi: $rida. Vanus: $line.
"; ) mysqli_close($link);

Ja veel üks näide päringust – see valib kasutajate tabelist ainult nimed, kõik peale Max.

SELECT nimi FROM kasutajatest WHERE nimi!="Max"

See on kõik WHERE-päringu jaoks.

Piiratud kanded – LIMIT

Lisades SQL-päringule käsu LIMIT, piirame tulemuse suurust.

Päring, mis tagastab kolm esimest kirjet, on: " SELECT * FROM users LIMIT 3 ". Vaatame, kuidas see töötab:

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Viga"); mysqli_select_db("testija"); echo "Tabeli sisu:
"; $result = mysqli_query($link, "SELECT * FROM users"); while ($rida = mysqli_fetch_row($result)) ( kaja "Eesnimi: $rida. Perekonnanimi: $rida. Vanus: $rida.
"; ) kaja"

Kolm esimest sissekannet:
"; $result = mysqli_query($link, "SELECT * FROM users LIMIT 3"); while ($line = mysqli_fetch_row($result)) ( echo "Eesnimi: $line. Perekonnanimi: $line. Vanus: $line .
"; ) kaja"

Kolm teist sissekannet:
"; $result = mysqli_query($link, "SELECT * FROM users LIMIT 3, 3"); while ($line = mysqli_fetch_row($result)) ( kaja "Eesnimi: $line. Perekonnanimi: $line. Vanus: $rida .
"; ) mysqli_close($link);

Ka siin kasutasime päringut: "SELECT * FROM users LIMIT 3, 3". Teine kolmik näitab päringu tulemuse nihet.

Sobi muster - LIKE

SQL-keel toetab lihtsaid malle. Selleks kasutage käsku LIKE ja määrake muster sümboliga %.

Siin on näidispäring, mis tagastab kõik kirjed, mille nimed algavad tähega S.

SELECT * FROM kasutajad WHERE nimi LIKE "S%"

Testin taotlust:

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Viga"); mysqli_select_db("testija"); echo "Tabeli sisu:
"; $result = mysqli_query($link, "SELECT * FROM users"); while ($rida = mysqli_fetch_row($result)) ( kaja "Eesnimi: $rida. Perekonnanimi: $rida. Vanus: $rida.
"; ) kaja"

S-iga algavad nimed:
"; $result = mysqli_query($link, "SELECT * FROM users WHERE name LIKE "S%""); while ($line = mysqli_fetch_row($result)) ( kaja "Eesnimi: $rida. Perekonnanimi: $line Vanus: $line.
"; ) mysqli_close($link);

Siin on näidispäring, mis tagastab kõik kirjed, mille perekonnanimed lõppevad tähega s.

SELECT * FROM kasutajad WHERE nimi LIKE "%s"

Tingimus täidetud - IN

See IN-käsku kasutav päring tagastab ainult need read, mis vastavad täpselt tingimusele.

Näiteks oleme huvitatud inimestest vanuses 21, 26 ja 33 aastat.

SELECT * FROM kasutajatelt WHERE vanus (21,26,33)

Testin taotlust:

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Viga"); mysqli_select_db("testija"); echo "Tabeli sisu:
"; $result = mysqli_query($link, "SELECT * FROM users"); while ($rida = mysqli_fetch_row($result)) ( kaja "Eesnimi: $rida. Perekonnanimi: $rida. Vanus: $rida.
"; ) kaja"

Nõutavas vanuses (21, 26, 33) inimesed:
"; $result = mysqli_query($link, "SELECT * FROM users WHERE age IN (21, 26, 33)"); while ($line = mysqli_fetch_row($result)) ( echo "Eesnimi: $rida. Perekonnanimi : $ rida. Vanus: $ rida.
"; ) mysqli_close($link);

Maksimaalne ja minimaalne väärtus veerus

Valib kasutajate tabelis maksimaalse vanuse väärtuse.

VALI max(vanus) kasutajatelt

Järgmine päring valib kasutajate tabelist andmed nime ja vanuse väljade abil, kus vanus võtab minimaalse väärtuse.

VALI kasutajate nimi, minimaalne vanus

Kirje värskendamine – VÄRSKENDUS

Määrame Max Lopesi vanuseks 15 aastat. Seda tehakse MySQL-päringuga:

VÄRSKENDAGE kasutajaid SET vanus="15" WHERE name="Max" AND perekonnanimi="Lopes"

Pange tähele uut käsku JA (inglise keeles tähendab "ja") päringus. Kui me perekonnanime ei täpsusta, siis määratakse tabelis kõikidele Maxidele vanuseks 15 aastat.

Ühe päringuga saate värskendada kahte või enamat välja ühes reas. Seda tehakse järgmiselt.

UPDATE kasutajad SET vanus = "18", perekonnanimi = "Pliit" WHERE id = "3"

Meie tabelis ei ole ID-välja, seega see päring sellel ei tööta. Kuid kindlasti õpime selgeks selle unikaalseid reanumbreid sisaldava välja.

Kirje kustutamine - DELETE

MySQL-i andmebaasi päring kirje kustutamiseks:

DELETE FROM kasutajatest WHERE id = "10"

Jällegi pole meie tabelis id-välja. Kuid me võime sealt eemaldada kõik alla 18-aastased.

DELETE FROM kasutajatest WHERE vanuses< "18"

Tabeli kustutamine – TABLE TABEL

MySQL-i andmebaasi päring, mis kustutab kogu kasutajate tabeli:

Drop TABLE kasutajad

Veeru kustutamine - ALTER TABLE ... Drop ...

Mõnikord peate võib-olla tabelist veeru eemaldama, näiteks eemaldame kasutajate vanuse veeru:

ALTER TABLE kasutajate vanus langeb

See MySQL-päring kustutas veeru jäädavalt ja jäädavalt.

Lisa veerg - ALTER TABLE ... LISA ...

Mõnikord peate võib-olla lisama olemasolevasse tabelisse veeru, näiteks lisame vanuse veeru tagasi kasutajate tabelisse:

ALTER TABLE kasutajad LISA vanus TINYINT UNsigned

Veeru ümbernimetamine - ALTER TABLE ... CHANGE ...

Mõnikord peate võib-olla veeru ümber nimetama, näiteks nimetama vanuse veeru ümber vozrastiks. Teeme seda nii:

ALTER TABLE kasutajad MUUDA vanust vanus TINYINT UNSINGNED

See MySQL-päring nimetas veeru vanuse ümber vozrastiks andmetüübiga TINYINT UNSIIGNED.

Tabeli ümbernimetamine – NIME TABLE ÜMBER ... KUNI ...

Mõnikord peate võib-olla tabeli ümber nimetama:

NIME TABLE'i kasutajad ÜMBER

Andmebaasi eemaldamine - DROPP DATABASE

See päring võib kustutada andmebaasi nimega tester:

DROP DATABASE tester

Andmebaasi loomine - CREATE DATABASE

See päring loob andmebaasi nimega tester:

LOO ANDMEBAASI tester

See taotlus töötab minu jaoks Denveris, kuid hostimisel ei pruugi see toimida, kui andmebaasi kasutajal pole õigusi kustutada.

Tulemused

Niisiis, selles osas tutvusime päringutega MySQL-ile. Paljud meie uuritud päringud ei ole meile tööprotsessis sageli kasulikud, kuid me peame neid teadma, kuna need tulevad skriptide väljatöötamisel kindlasti kasuks.

Mõned päringud tehakse tavaliselt ainult phpMyAdminilt (näiteks andmebaaside loomine ja kustutamine).

Veebisaitidel töötades peate tavaliselt tabelisse kirje lisama, kirjet redigeerima või kirje tabelist kustutama.

Järgmine samm on õppida tundma MySQL-i andmetüüpe.

Selles artiklis me õpime saata andmebaasipäringuid PHP kaudu. See artikkel on väga oluline ja peate sellest aru saama. Siiski rahustan teid - materjal on väga lihtne, nii et raskusi ei tohiks tekkida.

Enne artikli teema juurde asumist hoiatan teid ette, et ma üksikasjalikult ei analüüsi SQL keel. Kogu vajalik teave on sorteeritud kategooriasse, mis on pühendatud, kuid siin me ainult MySQL-iga töötamine PHP kaudu.

Liigume nüüd edasi andmebaasipäringute saatmine PHP-s:


}
$mysqli->query("INSERT INTO mytable (nimi, email) VALUES ("Minunimi", " [e-postiga kaitstud]")");
$mysqli->sulge();
?>

Selles näites loosime ühenduse andmebaasiga, kontrollisime ühenduse edukust ja saatsime meetodi abil päringu query() ja seejärel sulgege ühendus. Nagu näete, on kõik väga lihtne. Mis tahes saatmiseks SQL päringud Piisab vaid ühest meetodist - query(), nii et antud juhul on kõik uskumatult lihtne.

Teeme nüüd ülesande pisut keerulisemaks. Vaatame päringuid, mis tagastavad result_set- tulemus. Kõige populaarsem taotlus naaseb result_set on andmete valik tabelist. Järgmises näites võtame andmete näidise ja kuvame seejärel tulemuse:

$mysqli = @uus mysqli("localhost", "Admin", "pass", "mybase");
if (mysqli_connect_errno()) (
echo "Ühendus nurjus: ".mysqli_connect_error();
}
$result_set = $mysqli->
while ($rida = $result_set->fetch_assoc()) (
print_r($rida);
kaja"
";
}
$result_set->close();
$mysqli->sulge();
?>

Esiteks lubage mul selgitada veidi, mis see on. result_set. Tulemus_komplekt- see on tabel tulemusega. Selles tabelis on kirjete komplekt (tabeli read). Ja kõigi kirjete kuvamiseks peate kordama iga tabeli rida ja seda kuvama. Ja nüüd selgitan näitega: pärast päringu saatmist genereerime result_set. Seejärel omistame muutujale tsüklis rida järgmise rea väärtus, st ühemõõtmeline massiiv, mille meetod tagastab tõmba_assoc(). Kui kõik read on lõppenud, meetod tõmba_assoc() tuleb tagasi vale, ja tsüklist väljutakse. Silmuse sees samal ajal me lihtsalt väljastame massiivi, kasutades silumisfunktsiooni print_r(), kuigi seda saab kindlasti järeldada kasutades igaühele, kuid nüüd pole see vajalik.

Teeme lühidalt kokkuvõtte, kuidas sellega töötada result_set:

  1. Hangi result_set saates andmebaasi vastava päringu.
  2. Määrake tsüklis igal iteratsioonil järgmine rida (kirje) alates result_set meetodit kasutades tõmba_assoc() mingi muutuja rida. Seejärel saate selle muutujaga töötada ühemõõtmelise assotsiatiivse massiivina, milles võtmed on tabeliväljade nimed ja väärtused vastavad praegusele kirjele.
  3. Sulgege kindlasti result_set meetod Sulge() ressursse tühjendada.

Nagu märkasite, meetod tõmba_assoc() tagastab alati järgmise plaadi. See tähendab, et kõigepealt 1., siis 2., siis 3. ja nii edasi. Kui teil on hea programmeerimiskogemus, siis aimate kohe, et see juhtub tänu sisemisele kursorile, mida saate loomulikult liigutada. Kus seda kasutatakse? Näiteks saab seda kasutada, kui peate sellega töötama result_set Mitte 1 , A 2 ja rohkem kordi. Sama päringu uuesti genereerimise vältimiseks võite lihtsalt kursorit algusesse viia. Ja siis võid jälle toore jõuga käima hakata result_set kasutades meetodit fetch_assoc().

Kursori asukoha muutmiseks on olemas meetod data_seek(), mis võtab täisarvu väärtusest 0 enne" rekordite arv - 1", vastavalt asetatakse kursor parameetrile vastavale kirjele:

$mysqli = @uus mysqli("localhost", "Admin", "pass", "mybase");
if (mysqli_connect_errno()) (
echo "Ühendus nurjus: ".mysqli_connect_error();
}
$result_set = $mysqli->query("SELECT * FROM mytable");
$tulemuste_komplekt->ridade_arv;
while ($rida = $result_set->fetch_assoc()) (
print_r($rida);
kaja"
";
}
$tulemuste_komplekt->andmete_otsing(0);
while ($rida = $result_set->fetch_assoc()) (
print_r($rida);
kaja"
";
}
$result_set->close();
$mysqli->sulge();
?>

Selles näites on meil väljund kirjete arv result_setis vara kasutades ridade_arv. Tutvusime ka meetodiga data_seek(). See tähendab, et me itereerisime üle kogu tulemuse ja tagastasime seejärel kursori 0 rekord ja läbisin tulemuse uuesti.

Selles artiklis kordasime andmebaasiga ühenduse loomist ja ühenduse sulgemist. Ja sai ka teada kuidas teha päringuid andmebaasist PHP kaudu. õppinud, kuidas saada result_set ja kuidas sellega töötada. See on kõik, mida pead teadma, et olla edukas MySQL-iga töötamine PHP-s.

Märge: Pealisehitis Power Query pakutakse Excel 2016-s käskude rühmana Laadige alla ja teisendage. Selles artiklis olev teave kehtib nii Power Query kui ka uue rühma kohta. Lisateabe saamiseks vaadake allalaadimis- ja teisendusfunktsiooni Excel 2016-s.

Power Query töös Lisama loob uue päringu, mis sisaldab kõiki esimese päringu ridu ja seejärel kõiki teise päringu ridu.

Ohutusmärkus: Privaatsuse tasemed vältida andmete juhuslikku ühendamist mitmest allikast, mis võivad olla privaatsed või organisatsioonilised. Mõne päringu kasutamisel võib kasutaja tahtmatult saata andmeid privaatsest andmeallikast teise andmeallikasse. Ründajad saavad seda võimalust ära kasutada. Power Query analüüsib iga andmeallikat ja määrab selle tundlikkuse taseme: avalik, organisatsiooniline ja privaatne. Lisateavet privaatsustasemete kohta leiate jaotisest Privaatsustasemed.

Lisamise sooritamine

Saate teha kahte tüüpi lisamistoiminguid: vahepealne lisand või tekstisisene lisa. Kasutades vahepealne lisand Iga lisamistoimingu jaoks luuakse uus päring. Kell tekstisisene lisa lisate andmed olemasolevale päringule, kuni jõuate lõpptulemuseni. Tulemuseks on uus samm praeguse päringu lõpus.

Tekstisisene lisamine

Vahepealne lisand


Vaata ka:

Märge: Päringu redaktor nähtav ainult laadimisel, muutmisel või uue päringu loomisel kasutades Power Query. Video näitab akent päringu redaktor mis kuvatakse pärast päringu muutmist Exceli töövihikus. Vaatama päringu redaktor ilma töövihiku jaotises olemasolevat päringut laadimata või muutmata Väliste andmete vastuvõtmine lindi vahekaardil Power Query vali Muudest allikatest > Tühi taotlus. Video näitab ühte kuvamismeetoditest päringu redaktor.

Arvan, et kõik on kuulnud Pareto reeglist. Mis tahes valdkonnas annab 20% pingutustest 80% tulemustest. Näiteks kannate 80% ajast 20% oma garderoobist, 20% klientidest toovad sisse 80% teie sissetulekust. Sama on Google'i arvutustabelites: teades 20% olemasolevatest funktsioonidest, saate lahendada 80% kõigist võimalikest probleemidest.

Minu arvates on päring Google'i arvutustabelite üks kasulikumaid funktsioone. Kuid Google Help kirjeldab seda väga pealiskaudselt ja selle funktsiooni täit võimsust ei avaldata. Lähemal uurimisel selgub, et see on võimeline asendama enamiku olemasolevatest funktsioonidest.

QUERYga töötamiseks vajate SQL-i põhiteadmisi. Need, kes ei tea, ärge muretsege, funktsioon QUERY toetab tegelikult väga lihtsaid SQL-i funktsioone.

QUERY süntaks

QUERY(andmed; päring; [päised])
  • andmeid— see on lahtrivahemik, mis toimib SQL-päringu andmebaasina;
  • nõuda— SQL päringu tekst;
  • päised on valikuline argument, milles saate määrata, mitu massiivi esimestest ridadest sisaldab päiseid.

Täiendava teabe tajumise maksimeerimiseks soovitan avada ja kopeerida järgmine Google'i leht

Doksis, mille koopia lõite, on mitu lehte. DB-leht on andmebaas, millele pääseme juurde funktsiooni QUERY abil. Tasemelehed sisaldavad näiteid, mida selles artiklis vaatleme. Iga uue tasemega muutub näide keerulisemaks.

SQL päringuplaan funktsioonis Päring

Iga SQL-päring koosneb eraldi plokkidest, mida sageli nimetatakse laimuks. Funktsiooni Päring SQL kasutab Google Visualization API päringukeele süntaksit, mis toetab järgmisi klausleid.

  • vali— väljade loetelu, mis päringuga tagastatakse;
  • kus— sisaldab tingimuste loendit, mille alusel päringuga töödeldud andmemassiivi filtreeritakse;
  • rühma järgi— sisaldab väljade loendit, mille järgi soovite tulemusi rühmitada;
  • pöördepunkt— aitab koostada ristkaarte, kasutades lõpptabeli veergude nimedena ühe veeru väärtust;
  • tellida— vastutab tulemuste sorteerimise eest;
  • piiri- selle päringu osaga saab määrata päringu poolt tagastatavate ridade arvu piirangu;
  • nihe— selle laimu abil saate määrata esimeste ridade arvu, mida päring ei pea töötlema;
  • silt— see laim vastutab taotluses tagastatud väljade nimede eest;
  • vormingus— vastutab väljundandmete vormingu eest;
  • valikud - võimaldab määrata täiendavaid andmeväljundi parameetreid.

Funktsioon Hello World for Query (vali).

Läheme lehele Level_1 ja vaatame lahtris A1 olevat valemit.

Päring(DB!A1:L1143;"select * limit 100")

Osa valemist " DB!A1:L1143" vastutab andmebaasi eest, millest proovivõttu teeme. Teine osa" vali * piirang 100"sisaldab taotluse teksti. Sümbol "*" tähendab antud juhul kõigi andmebaasis sisalduvate väljade tagastamist. Kasutades " piir 100» Piirame väljundi maksimaalselt 100 reaga. See on näide kõige lihtsamast taotlusest. Valisime andmebaasist välja esimesed 100 rida. See on päringfunktsiooni jaoks omamoodi "Tere maailm".

Kasutame filtreid ja sorteerimist (Kus, Järjesta)

Mine lehele Level_2. Valime välja vaid mõned meile vajalikud väljad ning määrame filtreerimis- ja sortimistingimused. Näiteks kasutame andmeid ainult kampaaniate Campaign_1 ja Campaign_2 jaoks ajavahemikus 22.–25. oktoober 2015. Sorteerime need seansside arvu järgi kahanevas järjekorras. Filtreerimiseks ja sortimiseks tuleb päringu tekstile lisada laimu kirjeldus Kus Ja Telli. Eespool kirjeldatud näite kuvamiseks saadud tabelis vajame välju Kampaania, Kuupäev ja Seansid. Just nemad tuleb laimamises kirja panna Valige.

Andmebaasiväljadele pääseb juurde selle töölehe veergude nimede kaudu, millel andmebaas asub.

Meie puhul kirjutatakse lehe veergude nimeks DB-lehel asuvad andmed ja juurdepääs teatud väljadele. Seega asuvad nõutavad väljad järgmistes veergudes:

  • valdkonnas Kuupäev— veerg A;
  • valdkonnas Kampaania— veerg B;
  • valdkonnas Seansid- veerg G.

Sellest tulenevalt näeb päringu osa, mis vastutab selle tulemusel väljastavate andmete loendi eest, järgmine:

Valige A, B, G

Taotluses järgmine on laim Kus. Taotluse kirjutamisel tuleb laim paigutada selle artikli esimeses osas kirjeldatud järjekorras. Pärast teadaannet Kus peame loetlema filtreerimistingimused. Sellisel juhul filtreerime andmed kampaania nime (Campaign) ja kuupäeva (Date) järgi. Kasutame mitmeid filtreerimistingimusi. Päringu tekst peab sisaldama kõigi tingimuste vahel loogilist operaatorit VÕI või JA. Filtreerimine kuupäevade järgi erineb veidi numbri- ja tekstiväärtuste järgi filtreerimisest; selleks on vaja kuupäevaoperaatorit. Andmete filtreerimise eest vastutav päringu osa näeb välja järgmine:

KUS (A >= kuupäev"2015-10-22" JA A<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2")

Sulgude abil jagasime andmete filtreerimise kaheks loogiliseks osaks: esimene filtreerib kuupäevade järgi, teine ​​filtreerib kampaania nime järgi. Selles etapis näeb valitavaid andmeid ja andmete filtreerimise tingimusi kirjeldav valem välja järgmine:

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

Saate selle kopeerida ja kleepida näiteks selles postituses näitena kasutatud dokumendi uuele lehele ning saada järgmise tulemuse:

Lisaks tavalistele loogikaoperaatoritele (=,<, >) WHERE-plokk toetab täiendavaid filtreerimisoperaatoreid:

  • sisaldab— kontrollib teatud märkide sisu stringis. Näiteks WHERE A sisaldab sõna "John" tagastab filtrisse kõik väärtused veerust A, mis sisaldavad Johni, näiteks John Adams, Long John Silver;
  • algab- filtreerib väärtused prefiksi järgi, st kontrollib rea alguses olevaid märke. Näiteks, kui algab tähega en, tagastab väärtused Engineering ja english;
  • lõpeb- filtreerib väärtused stringi lõpus. Näiteks joon 'kauboi " tagastatakse sõnadega "lõpeb "poiss" või "lõpeb "y");
  • tikud— vastab regulaaravaldisele. Näiteks: kus vasted ‘.*ia “ tagastab väärtused India ja Nigeeria.
  • nagu - Regulaaravaldiste lihtsustatud versioon kontrollib metamärke kasutades, kas string vastab antud avaldisele. Praegu toetab like kahte metamärki: "%" tähendab mis tahes arvu tähemärke stringis ja "_" tähendab ühte märki. Näiteks "kus nimi nagu 'fre%" vastab ridadele 'tasuta ’, 'fred " ja "freddy ’.

Päring on juba teatud perioodi andmeid filtreerinud ja jätnud ainult meile vajalikud kampaaniad. Jääb üle vaid tulemus sorteerida kahanevas järjekorras olenevalt seansside arvust. Nende päringute sorteerimine toimub traditsiooniliselt SQL-i puhul, kasutades laimu Telli järgi. Süntaks on üsna lihtne: peate loetlema ainult väljad, mille järgi soovite tulemust sorteerida, ja määrama ka sortimisjärjestuse. Vaikimisi järjestus on tõusev, st tõusev. Kui määrate välja nime järel parameetri desc, tagastab päring tulemuse kahanevas järjestuses laimuga määratutest Telli järgi väljad.

Meie puhul vastutab filtreerimise eest päringu teksti rida:

Telli G desc

Sellest lähtuvalt näeb Level_2 lehel oleva valemi lõpptulemus, mis lahendab meile vajaliku probleemi, välja järgmine:

Query(DB!A1:L1143;" SELECT A, B, G WHERE (A >= kuupäev"2015-10-22" AND A<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2") ORDER BY G DESC")

Nüüd saate andmete filtreerimiseks ja sortimiseks kasutada lihtsat SQL-i süntaksit ja funktsiooni QUERY.

".
Võib-olla pole Moskva kontori meestel aega, nii et järgnev on päringu keele viite (versioon 0.7) tasuta tõlge.
Google'i visualiseerimise API. Päringu keel (versioon 0.7)
Google'i visualiseerimise API päringukeel võimaldab teil andmeid töödelda andmeallika päringu kaudu.

Tavaliselt nõuab visualiseerimine andmete esitamist mingil kindlal kujul. Näiteks sektordiagrammi jaoks on vaja kahte veergu: tekstisilti ja numbrilist väärtust. Andmeallikas ei pruugi sellele struktuurile vastata. See võib sisaldada rohkem veerge või nende järjestus erineb diagrammi jaoks nõutavast.
Päringukeel võimaldab meil andmeid struktureerida nii, nagu on vaja tulemuse saavutamiseks.
Päringukeele süntaks on sarnane SQL-iga. Need, kes oskavad SQL-i kasutada, saavad päringukeele kiiresti selgeks. Süntaksi jaotises kirjeldatakse nende keelte erinevusi.
Pange tähele, et visualiseerimiseks ei ole alati vaja kasutada päringukeelt. Selle kasutamiseks on vaja alust. Sisu juurde.

Päringukeele kasutamine

Saate andmeallikale päringustringi lisada kahel viisil: JavaScripti koodist või parameetrina andmeallika lingile. Kui teie link ei sisalda päringu parameetreid, tagastatakse vaikimisi kogu andmestik. Saate seda komplekti muuta, kohandades päringut andmeallika enda järgi.

Kui kasutate Google'i arvutustabelites funktsiooni QUERY, võite järgmised punktid vahele jätta ja liikuda järgmise osa juurde.

JavaScripti päringu määramine

Päringustringi määramiseks JavaScripti koodist peate meetodi kutsuma setQuery klass google.visualization.Query .
var query = new google.visualization.Query(DATA_SOURCE_URL);
query.setQuery("valige osakond, summa(palk) rühm osakonna kaupa");
query.send(handleQueryResponse);

Parameetri abil saab andmeallikale lisada päringustringi tq. Nii on võimalik kasutada teiste arendajate kirjutatud visualiseerimisi, lihtsalt kohandades oma andmekogumit.
Päringustring peab olema URL-i parameetrina õigesti kodeeritud. Võite kasutada JavaScripti funktsiooni encodeURIComponent kodeerimiseks või tehke seda käsitsi, kasutades jaotise lõpus olevat tööriista.
Näide
Vaatame Google'i lehe näidispäringut (Pidage meeles, et veeru identifikaatorid on alati tähed. Veergude nimed avaldamisel ei ole identifikaatorid. Päringus tuleb kasutada veergude identifikaatoreid)
Pärast kodeerimist näeb taotlus välja järgmine:
vali%20A%2C%20sum(B)%20grupp%20by%20A
Oletame, et andmetabeli aadress on järgmine:
http://spreadsheets.google.com/a/google.com/tq?key=ABCDE
Lisame päringu parameetri &tq=YOUR_QUERY_STRING Tabeli lingile ja hankige valmis päringutring
http://spreadsheets.google.com/a/google.com/tq?key=ABCDE&tq=select%A%2C%20sum(B)%20group%20by%20A

Keele süntaks

Ülevaade

Minu päringukeel on väga sarnane SQL-iga. Siiski on mõningaid funktsioone, mida tuleb arvesse võtta.
Andmete tabel
Selles dokumendis tutvustatakse mõistet "andmetabel", mis viitab päringu tulemustele. Tabel koosneb ridadest ja veergudest. Igal veerul on järgmised omadused:
  • Identifikaator (või veeru ID). Kasutatakse tabeli veergudele viitamiseks. Pange tähele, et peate veerule viitama ainult selle identifikaatori järgi. Trikk: proovige mitte kasutada identifikaatorites tühikuid, see võib päringu muutmisel raskusi tekitada. Lisaks peavad kõik tühikutega identifikaatorid olema ümbritsetud jutumärkidega.
  • Silt. See on string, mida tavaliselt lõppkasutajatele kuvatakse. Näiteks legend sektordiagrammis või pealkiri tabelidiagrammis. Ei kehti Google'i arvutustabelite funktsiooni QUERY() puhul.
  • Andmetüübid. Toetatud on järgmised andmetüübid: string, number, tõeväärtus, kuupäev, kuupäev, kellaaeg, kellaaeg. Kõik veerus olevad väärtused on selle veeru andmetüübid või nullid. Need andmetüübid on JavaScripti tüüpidega väga sarnased, kuid mitte identsed. Neid kirjeldatakse jaotises Literaalid.
  • Vormindamismallid. Andmetabelid võivad toetada kõigi või mõne veeru vormindamismustreid. Neid kirjeldatakse jaotises Vormindamine.
Andmetabel, mida kasutatakse kõigis näidetes
Selle dokumendi näidetes kasutatakse tabelit järgmiste andmete ja veerutüüpidega:
nimi
string
osakond
string
Lõuna aeg
kellaaeg

Palk
number

rentDate
kuupäev
vanus
number
on Vanem
tõeväärtus
staaži Algusaeg
kuupäev Kellaaeg
John Eng 12:00:00 2005-03-19 35 tõsi 2007-12-02 15:56:00
Dave Eng 12:00:00 2006-04-19 27 vale null
Sally Eng 13:00:00 2005-10-10 30 vale null
Ben Müük 12:00:00 2002-10-10 32 tõsi 2005-03-09 12:30:00
Dana Müük 12:00:00 2004-09-08 25 vale null
Mike Turundus 13:00:00 2005-01-10 24 tõsi 2007-12-30 14:40:00

Keeleoperaatorid

Päringukeel koosneb järgmistest ühe- või kahesõnalistest lausetest. Operaatorid peavad üksteist järgima tabelis näidatud järjekorras:
Operaator Kasutamine
vali Valib, millised veerud tagastatakse ja millises järjekorras. Kui operaator on välja jäetud, tagastatakse kõik tabeli veerud.
Tagastab ainult need tabeli read, mis vastavad tingimusele. Kui operaator jäetakse välja, tagastatakse kõik tabeli read.
rühma järgi Rühmitab väärtused ridade kaupa.
pöördepunkt Teisendab veergude kordumatud väärtused uuteks veergudeks, sarnaselt pivot-tabeliga.
tellida Sorteerib read väärtuste alusel.
piiri Määrab tagastatavate ridade piirangu.
nihe Jätab väljundist vahele määratud arvu ridu.
silt Määrab veergude pealdised.
vormingus Vormindab määratud veergudes olevad väärtused vastavalt vormindusmustritele.
valikuid Määrab lisavalikud.
alates Operaatorit from ei kasutata.
Valige
Valimislause määrab, millised veerud tuleb tagastada ja millises järjekorras. Kui operaatorit pole määratud või on määratud *, tagastatakse kõik tabeli veerud nende algses järjekorras. Veergudele saab viidata identifikaatorite, kuid mitte siltide kaudu. Google'i arvutustabelite identifikaatorid on ühe- või kahetähelised veerunimed (A, B, C, ..., AC, ..., DC, ...).
Operaatori parameetrid võivad olla veeru identifikaatorid, koondfunktsioonid, skalaarfunktsioonid või aritmeetilised operaatorid.
Näited:
vali *
vali osakond, palk
vali max (palk)
e-posti aadresskuupäev):

Saame tulemuse:
Lõuna aeg nimi
12:00:00 John
12:00:00 Dave
13:00:00 Sally
12:00:00 Ben
12:00:00 Dana
13:00:00 Mike
Avaldist where kasutatakse ainult nende ridade tagastamiseks, mis vastavad tingimustele.
Tingimuste kirjeldamiseks kasutatakse lihtsaid võrdlusoperaatoreid<=, <, >, >=, =, !=, <>. Mõlemad operaatorid !=,<>tähendab pole võrdne. Stringe võrreldakse nende leksikograafilise väärtuse järgi. Pange tähele, et võrdsust kontrollitakse operaatori =, mitte == kaudu, nagu paljudes keeltes. Võrdlus nulliga on null ja ei ole null . Kui kasutate Google'i arvutustabelites päringut QUERY(), on stringiväljal tavaliselt tühi väärtus "", mitte null .
Saate kombineerida mitu tingimust, kasutades loogilisi tehteid ja või mitte. Sulge kasutatakse selge prioriteedi määratlemiseks.

Avaldis where kasutab keerukamate stringide võrdlemiseks ka täiendavaid operaatoreid. Need operaatorid võtavad kaks argumenti, mis peavad olema stringid, kõik mittestringi argumendid (kuupäev, number) teisendatakse enne võrdlemist stringiks. Võrdlus on tõstutundlik (selle funktsiooni silumiseks kasutage skalaarfunktsioone top(), low()).
sisaldab – vastab alamstringile. Avaldis tagastab tõene, kui osa stringist vastab täielikult antud argumendile - alamstringile. Näiteks kui nimi sisaldab sõna "John", tagastatakse "John", "John Adams", "Pikk John Silver" kuid mitte "John Adams".

Näited:
vali *
vali osakond, palk
vali max (palk)
Järgmine näide näitab identifikaatori viidete kasutamist tühikutega ( e-posti aadress) ja identifikaatoritele, mis vastavad reserveeritud sõnade nimedele ( kuupäev):
valige "e-posti aadress", nimi, kuupäev
Rakendame näidistabelisse järgmise päringu:
Saame tulemuse:
Lõuna aeg nimi
12:00:00 John
12:00:00 Dave
13:00:00 Sally
12:00:00 Ben
12:00:00 Dana
13:00:00 Mike