Mysql näyttää tietyn määrän tietueita. Rivien valinta ja laskeminen yhdessä kyselyssä - SQL_CALC_FOUND_ROWS. COUNT()-funktion käyttäminen esimerkkinä

Versiosta 4.0 alkaen MySQL DBMS:llä on melko kätevä kyky laskea kaikkien kyselyä vastaavien tietueiden lukumäärä, kun tietueiden määrää rajoittaa LIMIT. Kun työskentelet tietokantahakujen kanssa sekä valittaessa taulukoista, joissa on suuri määrä tietueita, tällainen toiminnallisuus on yksinkertaisesti välttämätöntä.

Syntaksi. SELECT-kyselyssä sinun on määritettävä SQL_CALC_FOUND_ROWS-vaihtoehto ennen sarakeluetteloa. Tässä on SELECT-syntaksin alku.

VALITSE




select_expr, … …

Siten suoritettaessa SELECT SQL_CALC_FOUND_ROWS -kyselyä DBMS laskee kyselyehtoa vastaavien rivien kokonaismäärän ja tallentaa tämän luvun muistiin. Luonnollisesti SELECT SQL_CALC_FOUND_ROWS -kyselyssä on järkeä vain, kun käytetään rajaa (LIMIT). Välittömästi valintakyselyn suorittamisen jälkeen tietueiden määrän saamiseksi sinun on suoritettava toinen SELECT-kysely: SELECT FOUND_ROWS ();. Tämän seurauksena MySQL palauttaa yhden rivin, jossa on yksi kenttä, johon rivien määrä tallennetaan.

Esimerkki itse kyselyistä:

> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE numero > 100 RAJA 10;
> SELECT FOUND_ROWS();

Ensimmäinen kysely palauttaa (tulostus) 10 riviä taulukosta tbl_name, jonka ehdon numero > 100 on tosi. Toinen SELECT-komennon kutsu palauttaa sen rivien määrän, jonka ensimmäinen SELECT-komento olisi palauttanut, jos se olisi kirjoitettu ilman. LIMIT-lauseke. Vaikka SELECT SQL_CALC_FOUND_ROWS -komennon käyttäminen vaatii MySQL:n laskemaan uudelleen kaikki tulosjoukon rivit, se on silti nopeampi kuin ilman LIMITiä, koska sen ei tarvitse lähettää tulosta asiakkaalle.

Esimerkkipyynnöt PHP:ltä:

$tulos = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM table1 RAJA 0, 10", $linkki);
while ($rivi = mysql_fetch_assoc($tulos))
{
var_dump($rivi);
}

$tulos = mysql_query("SELECT FOUND_ROWS()", $link);
$rivien_määrä = mysql_result($tulos, 0);
echo "$num_rows Rows\n";

Koodin suorittamisen seurauksena, edellyttäen, että $link osoittaa avoimeen yhteyteen DBMS:ään, PHP tulostaa 10 riviä taulukosta 1 ja sen jälkeen kyselyä vastaavien rivien lukumäärän kokonaislukuarvon (jätä huomioimatta LIMIT).

UNION-kyselyissä SQL_CALC_FOUND_ROWS voi toimia kahdella tavalla, koska LIMIT voi esiintyä useissa paikoissa. Rivimäärät voidaan säilyttää yksittäisille SELECT-kyselyille tai koko kyselylle yhdistämisen jälkeen.

SQL_CALC_FOUND_ROWS for UNIONin tarkoitus on, että sen pitäisi palauttaa rivien määrä, joka palautettaisiin ilman yleistä LIMIT-rajoitusta. Ehdot SQL_CALC_FOUND_ROWS:n käyttämiselle UNIONin kanssa on lueteltu alla:

  • Avainsana SQL_CALC_FOUND_ROWS on määritettävä ensimmäisessä SELECT-käskyssä.
  • FOUND_ROWS()-arvon arvo on tarkka vain, jos UNION ALL on käytössä. Jos UNION on määritetty ilman ALL, kaksoiskappaleet poistetaan ja FOUND_ROWS()-arvon arvo on vain likimääräinen.
  • Jos LIMIT ei ole UNIONissa, SQL_CALC_FOUND_ROWS ohitetaan ja UNIONin suorittamista varten luodun väliaikaisen taulukon rivien määrä palautetaan.
Muistetaan, mitä viestejä ja missä aiheissa meillä on. Voit tehdä tämän käyttämällä tavallista kyselyä:

Entä jos meidän on vain selvitettävä, kuinka monta viestiä foorumilla on. Voit tehdä tämän käyttämällä sisäänrakennettua toimintoa KREIVI(). Tämä toiminto laskee rivien määrän. Lisäksi, jos * käytetään argumenttina tälle funktiolle, kaikki taulukon rivit lasketaan. Ja jos sarakkeen nimi on määritetty argumentiksi, vain ne rivit, joilla on arvo määritetyssä sarakkeessa, lasketaan.

Esimerkissämme molemmat argumentit antavat saman tuloksen, koska kaikki taulukon sarakkeet EIVÄT ole NULLeja. Kirjoitetaan kysely käyttämällä argumenttina id_topic-saraketta:

SELECT COUNT(id_topic) FROM viestistä;

Joten, aiheissamme on 4 viestiä. Mutta entä jos haluamme tietää, kuinka monta viestiä kussakin aiheessa on. Tätä varten meidän on ryhmiteltävä viestimme aiheittain ja laskettava kunkin ryhmän viestien määrä. Käytä operaattoria ryhmitelläksesi SQL:ssä GROUP BY. Pyyntömme näyttää nyt tältä:

SELECT id_topic, COUNT(id_topic) FROM viestistä GROUP BY id_topic;

Operaattori GROUP BY käskee DBMS:ää ryhmittelemään tiedot id_topic-sarakkeen mukaan (eli jokainen aihe on erillinen ryhmä) ja laskemaan kunkin ryhmän rivien lukumäärän:

No, aiheessa id=1 meillä on 3 viestiä ja id=4:llä yksi. Muuten, jos puuttuvat arvot olisivat mahdollisia id_topic-kentässä, tällaiset rivit yhdistettäisiin erilliseen ryhmään arvolla NULL.

Oletetaan, että olemme kiinnostuneita vain niistä ryhmistä, joilla on enemmän kuin kaksi viestiä. Normaalissa kyselyssä määritämme ehdon käyttämällä operaattoria MISSÄ, mutta tämä operaattori voi toimia vain merkkijonojen kanssa, ja ryhmille samat toiminnot suorittaa operaattori OTTAA:

SELECT id_topic, COUNT(id_topic) FROM viestistä GROUP BY id_topic HAVING COUNT(id_topic) > 2;

Tämän seurauksena meillä on:

Oppitunnilla 4 tarkastelimme, mitä ehtoja operaattori voi asettaa MISSÄ, operaattori voi määrittää samat ehdot OTTAA, sinun tarvitsee vain muistaa se MISSÄ suodattimet merkkijonot ja OTTAA- ryhmät.

Joten tänään opimme luomaan ryhmiä ja kuinka laskea rivien lukumäärä taulukossa ja ryhmissä. Yleensä yhdessä operaattorin kanssa GROUP BY Voit käyttää muita sisäänrakennettuja toimintoja, mutta tutkimme niitä myöhemmin.

Olen kerran kohdannut tämän ongelman, mutta monet Internetissä tarjotuista ratkaisuista eivät toimineet minulle. Ja silti löysin tien ulos. Eikä edes yksin.

Tapa 1. phpMyAdmin

Aloitetaan yksinkertaisimmasta ja ilmeisimmästä. Oletetaan, että sinun ei tarvitse käyttää tulosta koodissa, vaan selvitä vain rivien määrä, siinä kaikki.

Siirry sitten phpMyAdminiin (localhost/tools/phpmyadmin - Denverille), valitse sitten haluamasi tietokanta, valitse sitten taulukko, rivien määrä, joista sinun on selvitettävä, ja näet seuraavan viestin:

Menetelmä 2. COUNT

Itse SQL-kysely näyttää tältä:

SQL-kysely ehdolla:

Toteutus PHP:ssä:

Vastaavasti voit lisätä ehdon tähän. Sitten koodi näyttää ehdon täyttävien rivien määrän taulukossa.

Tapa 3: mysql_num_rows

Esimerkiksi WordPressissä viestit tallennetaan wp_posts-taulukkoon, joten voimme selvittää kuinka monta viestiä (postausta) on tallennettu tietokantaan (MySQL-taulukkoon). Tämä koodi annetaan vain esimerkiksi (tai tapauksiin, joissa WordPress-ympäristöä ei ladata), koska WordPressissä yhteys tietokantaan tapahtuu .

Tulos sisältää ehdottomasti kaikki ennätykset. Kuinka voit saada selville vain julkaistujen julkaisujen määrän? Tätä varten meidän on muutettava hieman SQL-kyselyä.

Kirjailijalta: yksi ystäväni väittää, että joulupukki on olemassa. Hän uskoi häneen sen jälkeen, kun hänen nuorimmalle pojalleen annettiin 10 kg suklaata uudeksi vuodeksi. Nyt ensi vuonna täytyy pyytää joulupukilta täytteitä kaikille perheenjäsenille! Onneksi web-ohjelmoinnissa voit pelata varmana tällaisia ​​yllätyksiä vastaan ​​ja määrittää MySQL:n rivien lukumäärän etukäteen.

Miksi tietää kuinka paljon?

Mikä tahansa taulukko koostuu sarakkeista ja riveistä. Tietokantaan tallennettu määrä riippuu siitä, kuinka monta riviä kussakin sen taulukossa on.

Aivan kuten reikien määrä ihmisen hampaissa riippuu aiemmin syödyn karamellimäärästä. Tarkemmin sanottuna lapsellesi uudeksi vuodeksi "lahjattujen" makeisten kokonaispainosta.

On selvää, että suuri määrä MySQL-tietokannan rivejä ei lisää täyttöjä suuhusi, mutta tämän parametrin tuntemus saattaa kuitenkin olla tarpeen sivustosi toiminnan optimoinnissa, joidenkin skriptien suorittamisessa jne.

Helposti!

Saadaksesi MySQL:n rivien määrän, sinun ei tarvitse olla älykäs SQL-kyselyjen laatimisessa. Avaa vain haluamasi taulukko ohjelman kuoressa ja katso viimeisen rivin id. Tätä saraketta käytetään useimmiten yksilöllisenä avaimena, ja sen arvo luodaan automaattisesti (automaattinen lisäys) lisäämällä yksi (+1) edelliseen.

Tämän "aksiooman" todistamiseksi avataan taulukko missä tahansa tietokannassa phpMyAdminissa. Esimerkiksi ruokaeläin. Kuten kuvakaappauksesta näet, id-sarakkeen arvo menee järjestyksessä, 1:stä... Joten, laita se sivuun! Minne kissa, jolla on "tunnistenumero" 4, karkasi? Hän luultavasti pelkäsi jälleen "koiria" numerot 5 ja 6

Tässä MySQL-tietokannassa voit yksinkertaisesti laskea taulukon rivien määrän "sormillasi". Mutta entä jos taulukossa ei ole 7 riviä, vaan useita satoja? Esimerkiksi kuten tässä.

Ja tämä on vain yksi kahdeksasta esimerkkisivusta. Itse asiassa tietueiden lukumäärä voidaan laskea ei vain satoihin, vaan myös tuhansiin. Lisäksi id-saraketta ei ole, koska se on valinnainen. Sen läsnäolo riippuu koko tietokannan rakenteesta, koska siinä kaikkien rivien arvot ovat yhteydessä toisiinsa. Osoittautuu, että yllä kuvattu MySQL-rivien laskentamenetelmä ei aina toimi.

Useita oikeita tapoja

Kuten he sanovat, ensimmäinen menetelmä on möykky, joten tarkastellaan useita tehokkaampia ja vähemmän "yksinkertaisia" menetelmiä:

COUNT()-funktio – palauttaa rivien määrän. On sisäänrakennettu SQL-toiminto. Selvitetään kuitenkin tietokannasta suuren taulukon tietueiden lukumäärä, jonka kuvakaappaus on annettu yllä. Varauskoodi:

SELECT COUNT(*) FROM "maa".

SELECT COUNT (*) FROM "maa".

Osoittautuu, että maataulukossa on peräti 239 tietuetta! On selvää, että sormet tai varpaat eivät riitä laskemaan niitä (ellet käytä muiden ihmisten tai eläinten raajoja)). Kuten näette, tämä menetelmä MySQL:n rivien lukumäärän laskemiseksi toimii paljon tarkemmin ja sitä käytetään useimmiten.

Mutta tämä toiminto tekee enemmän kuin vain sen! Sen avulla voit esimerkiksi selvittää, kuinka monta tietokannassa ”edustettua” maata on Euroopassa:

Ja myös kuinka monta kertaa kukin maa on mainittu taulukossa. Esimerkkipyyntö:

SELECT `nimi` , COUNT(*) FROM `maa` GROUP BY `Nime'

SELECT ` nimi ` , COUNT (* ) FROM ` maa ` GROUP BY ` Nimi `

Tämän kyselyn avulla saimme selville kunkin maan mainitsevien MySQL-rivien lukumäärän. Sen toteutuksen tuloksista on selvää, että yksi kerrallaan.

Melkein unohdin! Jos sinulla ei vielä ole maailman tietokantaa, jonka kanssa työskentelemme tänään, voit ladata sen tästä linkistä MySQL DBMS -kehittäjien viralliselta verkkosivustolta. Kun olet ladannut arkiston sen mukana, sinun on purettava se ja tuotava se tietokantapalvelimelta. phpMyAdminissa tämä voidaan tehdä "Tuo"-päävalikon kautta.

Puhuin tästä menettelystä yksityiskohtaisemmin yhdessä aiemmista materiaaleista.

MAX()-funktio - joissakin tapauksissa se mahdollistaa myös MySQL:n selvittää taulukon rivien lukumäärän. Miksi joskus? Selitän nyt. Muista ensimmäinen laskentatapa, jota tarkastelimme alussa. Se tarkoittaa, että id-sarakkeen suurin arvo on yhtä suuri kuin tietueiden lukumäärä. Tämän toiminnon käyttäminen on eräänlainen menetelmän "automaatio". MAX() palauttaa määritetyn sarakkeen (id) enimmäisarvon. Toiminnon testaamiseen käytämme kaupunkitaulukkoa, joka on myös osa maailmantietokantaa. Varauskoodi:

VALITSE MAX(`ID`) `kaupungista`

VALITSE MAKSIMI (`TUNNUS) `kaupungista`

Kyselyn tuloksena saimme viimeisen rivin sarakkeen arvon. Osoittautuu, että MySQL on laskenut rivien määrän.

Tarvittaessa saat viimeisen tietueen kokonaisuudessaan:

SELECT MAX(`ID`),`Nimi`, `Maakoodi`,`Piiri`,`Väestö` `kaupungista`

SELECT MAX (`ID`), `nimi`, `CountryCode`, `District`, `Väestö` `kaupungista`

Huomaa, että valintaa varten listaamme kaikkien sarakkeiden nimet ennen funktion kutsumista *-merkin sijaan. Tämä on syntaksiominaisuus käytettäessä MySQL:n sisäänrakennettuja toimintoja.

PHP:n tietueiden määrän määrittäminen

Usein PHP MySQL -sivustojen koodissa täytyy saada rivien määrä, jotta tämä arvo voidaan välittää syöttöparametrina jatkokäsittelyä varten. Tämä voidaan tehdä seuraavalla koodilla:

query("SELECT * FROM `maa")) ( printf("Taulukossa on %d riviä.\n", $tulos->rivien_määrä); $tulos->sulje(); ) mysqli_close($con); ?>


Yläosa