Načítanie a počítanie riadkov v jednom dotaze - SQL_CALC_FOUND_ROWS. Načítanie a počítanie riadkov v jednom dotaze - SQL_CALC_FOUND_ROWS Určenie počtu záznamov v PHP

Od autora: jeden môj priateľ tvrdí, že Santa Claus existuje. Uveril mu po tom, čo jeho najmladšieho syna obdarovali 10 kg čokoládou na Nový rok. Teraz budúci rok budete musieť požiadať Santa Clausa o náplne pre všetkých členov rodiny! Našťastie pri webovom programovaní môžete proti takýmto prekvapeniam hrať na istotu a vopred určiť počet riadkov v MySQL.

Prečo vedieť koľko?

Každá tabuľka sa skladá zo stĺpcov a riadkov. Množstvo údajov uložených v databáze závisí od toho, koľko riadkov obsahuje každá z jej tabuliek.

Rovnako ako počet dierok v zuboch človeka závisí od množstva skôr zjedených cukríkov. Presnejšie, z celkovej hmotnosti sladkostí, ktoré boli „obdarované“ vášmu dieťaťu na Nový rok.

Je jasné, že veľké množstvo riadkov v databáze MySQL nepridá pečate do úst, no znalosť tohto parametra môže byť potrebná pri optimalizácii vašej stránky, na spustenie niektorých skriptov atď.

Jednoducho!

Na získanie počtu riadkov v MySQL nie je potrebné byť „chytrý“ pri príprave SQL dotazov. Stačí len otvoriť požadovanú tabuľku v shelli programu a vidieť id posledného riadku. Práve tento stĺpec sa najčastejšie používa ako jedinečný kľúč a jeho hodnota sa generuje automaticky (autoincrement) inkrementáciou o jednu (+1) k predchádzajúcemu.

Aby sme túto „axiómu“ dokázali, otvorme si tabuľku ľubovoľnej databázy v phpMyAdmin. Napríklad stolové zviera. Ako môžete vidieť na snímke obrazovky, hodnota stĺpca id ide v poradí od 1 do... Takže odložte! Kam utiekla mačka s "identifikačným číslom" 4? Pravdepodobne sa opäť „psíci“ s číslom 5 a 6 báli

V tejto databáze MySQL sa počet riadkov v tabuľke dá jednoducho spočítať na prstoch. Čo ak však tabuľka neobsahuje 7 riadkov, ale niekoľko stoviek? Napríklad ako tento.

A toto je len jedna z ôsmich vzorových strán. V skutočnosti sa počet záznamov dá počítať nielen v stovkách, ale aj v tisíckach. Okrem toho tu nie je stĺpec id, pretože je voliteľný. Jeho prítomnosť závisí od štruktúry celej databázy, pretože hodnoty všetkých riadkov v nej sú vzájomne prepojené. Ukazuje sa, že vyššie popísaná metóda počítania riadkov MySQL nie vždy funguje.

Niekoľko správnych metód

Ako sa hovorí, prvá metóda je „hrudkovaná“, takže zvážime niekoľko efektívnejších a menej „jednoduchých“ metód:

Funkcia COUNT () - vracia počet riadkov. Je to vstavaná funkcia SQL. Napriek tomu zistime počet záznamov veľkej tabuľky z databázy, ktorej snímka obrazovky je uvedená vyššie. Vyžiadať kód:

VYBERTE POČET (*) Z „krajiny“.

VYBERTE POČET (*) Z „krajiny“.

Ukazuje sa, že v tabuľke krajín je až 239 záznamov! Je jasné, že na ich spočítanie nebude dostatok prstov ani na rukách, ani na nohách (ak nepoužívate končatiny iných ľudí alebo zvierat)). Ako vidíte, tento spôsob počítania počtu riadkov v MySQL funguje oveľa presnejšie a je najčastejšie používaný.

Táto funkcia však dokáže viac než len to! S jeho pomocou môžete napríklad zistiť, koľko krajín „zastúpených“ v databáze je v Európe:

A tiež, koľkokrát je každá krajina uvedená v tabuľke. Príklad žiadosti:

VYBERTE `Názov`, COUNT (*) FROM` country` GROUP BY `Názov`

VYBERTE `Názov`, COUNT (*) FROM `country` GROUP BY `Name`

Týmto dotazom sme zistili počet riadkov v MySQL, ktoré spomínajú jednotlivé krajiny. Z výsledkov jej vykonania je zrejmé, že raz.

Takmer som zabudol! Ak ešte nemáte svetovú databázu, s ktorou dnes pracujeme, môžete si ju stiahnuť pomocou tohto odkazu z oficiálnej stránky vývojárov MySQL DBMS. Po stiahnutí archívu s ním ho musíte rozbaliť a potom importovať nedatabázový server. V phpMyAdmin to možno vykonať cez položku hlavného menu Import.

O tomto postupe som podrobnejšie hovoril v jednom z predchádzajúcich materiálov.

Funkcia MAX () - v niektorých prípadoch umožňuje aj MySQL zistiť počet riadkov v tabuľke. Prečo niekedy? Teraz vysvetlím. Spomeňte si na prvú metódu počítania, na ktorú sme sa pozreli na začiatku. Predpokladá, že najväčšia hodnota v stĺpci id sa rovná počtu záznamov. Použitie tejto funkcie je akousi „automatizáciou“ danej metódy. MAX () vráti maximálnu hodnotu zadaného stĺpca (id). Na testovanie funkcie nám poslúži tabuľka mesta, ktorá je tiež súčasťou svetovej databázy. Vyžiadať kód:

VYBERTE MAX (ID) Z mesta

VYBERTE MAX (ID) Z 'mesta'

V dôsledku vykonania dotazu sme dostali hodnotu stĺpca posledného riadku. Ukázalo sa, že MySQL spočítalo počet riadkov.

V prípade potreby môžete získať posledný záznam v celom rozsahu:

SELECT MAX (`ID`),` Name`, `CountryCode`,` District`, `Population` FROM` city`

SELECT MAX (ID), Názov, Kód krajiny, Okres, Obyvateľstvo FROM Mesto

Všimnite si, že pre výber pred volaním funkcie uvádzame namiesto "*" názvy všetkých stĺpcov. Toto je funkcia syntaxe pri používaní vstavaných funkcií v MySQL.

Určenie počtu záznamov v PHP

V kóde stránok PHP MySQL sa často vyžaduje prijatie počtu riadkov, aby sa potom táto hodnota odovzdala ako vstupný parameter pre ďalšie spracovanie. Môžete to urobiť pomocou nasledujúceho kódu:

dotaz ("SELECT * FROM` country` ")) (printf (" V tabuľke je % d riadkov. \ n ", $ result-> num_rows); $ result-> close ();) mysqli_close ($ con) ; ?>

Na určenie počtu záznamov v tabuľke MySQL je potrebné použiť špeciálnu funkciu COUNT ().

Funkcia COUNT () vráti počet záznamov v tabuľke, ktoré zodpovedajú danému kritériu.

Funkcia COUNT (expr) počíta vždy len tie riadky, kde je expr vyhodnotené ako NOT NULL.

Výnimkou z tohto pravidla je použitie funkcie COUNT () s hviezdičkou ako argumentom - COUNT (*). V tomto prípade sa berú do úvahy všetky riadky bez ohľadu na to, či sú NULL alebo NOT NULL.

Napríklad funkcia COUNT (*) vráti celkový počet záznamov v tabuľke:

SELECT COUNT (*) FROM table_name

Ako spočítať počet záznamov a zobraziť

Príklad PHP + MySQL kódu na počítanie a zobrazenie celkového počtu riadkov:

$ res = mysql_query ("SELECT COUNT (*) FROM table_name") $ riadok = mysql_fetch_row ($ res); $ celkom = $ riadok; // celkove zaznamy echo $ total; ?>

Tento príklad ilustruje najjednoduchšie použitie funkcie COUNT (). Ale s touto funkciou môžete vykonávať aj iné úlohy.

Zadaním konkrétneho stĺpca tabuľky ako parametra funkcia COUNT (názov_stĺpca) vráti počet záznamov v tomto stĺpci, ktoré neobsahujú NULL. Nulové položky sa ignorujú.

SELECT COUNT (názov_stĺpca) FROM názov_tabuľky

Nemôžete použiť funkciu mysql_num_rows (), pretože na zistenie celkového počtu záznamov musíte vykonať dotaz SELECT * FROM db, to znamená získať všetky záznamy, čo je nežiaduce, preto je lepšie použite funkciu počítania.

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

Použitie funkcie COUNT () na príklade

Tu je ďalší príklad použitia funkcie COUNT (). Povedzme, že existuje tabuľka zmrzliny s katalógom zmrzliny, ktorý obsahuje ID kategórií a názvy zmrzliny.

Od verzie 4.0 má MySQL DBMS pomerne pohodlnú schopnosť spočítať počet všetkých záznamov vhodných pre dotaz, keď je počet záznamov obmedzený LIMIT. Pri práci s databázovým vyhľadávaním, ako aj pri výbere z tabuliek s veľkým počtom záznamov je takáto funkcionalita jednoducho nevyhnutná.

Syntax. V dotaze SELECT musí byť pred zoznamom stĺpcov zadaná voľba SQL_CALC_FOUND_ROWS. Tu je začiatok syntaxe klauzuly SELECT.

VYBRAŤ




select_expr, ... ...

Spustením dotazu SELECT SQL_CALC_FOUND_ROWS teda DBMS spočíta celkový počet riadkov zodpovedajúcich podmienke dotazu a uloží tento počet do pamäte. Prirodzene, dotaz SELECT SQL_CALC_FOUND_ROWS má zmysel len vtedy, keď sa použije obmedzenie (LIMIT). Ihneď po vykonaní výberového dotazu na získanie počtu záznamov musíte vykonať ďalší SELECT dotaz: SELECT FOUND_ROWS () ;. Výsledkom je, že MySQL vráti jeden riadok s jedným poľom, v ktorom bude uložený počet riadkov.

Príklad samotných žiadostí:

> SELECT SQL_CALC_FOUND_ROWS * FROM názov_tbl WHERE číslo> 100 LIMIT 10;
> SELECT FOUND_ROWS ();

Prvý dotaz vráti (zobrazí) 10 riadkov tabuľky tbl_name, pre ktorú je splnená podmienka číslo > 100. Druhé volanie príkazu SELECT vráti počet riadkov, ktoré by vrátil prvý príkaz SELECT, keby bol napísaný bez klauzuly LIMIT. Aj keď použitie príkazu SELECT SQL_CALC_FOUND_ROWS vyžaduje, aby MySQL prepočítala všetky riadky v sade výsledkov, táto metóda je stále rýchlejšia ako bez LIMIT, pretože nemusí odosielať výsledok klientovi.

Vzorové požiadavky z PHP:

$ vysledok = mysql_query ("SELECT SQL_CALC_FOUND_ROWS * FROM table1 LIMIT 0, 10", $ link);
while ($ riadok = mysql_fetch_assoc ($ výsledok))
{
var_dump (riadok $);
}

$ vysledok = mysql_query ("SELECT FOUND_ROWS ()", $ link);
$ num_rows = mysql_result ($ výsledok, 0);
echo "$ num_rows Riadky \ n";

V dôsledku vykonania kódu, za predpokladu, že $ link ukazuje na otvorené pripojenie k DBMS, PHP vypíše 10 riadkov z tabuľky1 a potom celočíselnú hodnotu pre počet riadkov, ktoré zodpovedajú dopytu (okrem LIMIT).

V dotazoch s UNION sa SQL_CALC_FOUND_ROWS môže správať dvoma spôsobmi, pretože LIMIT sa môže objaviť na viacerých miestach. Počítanie riadkov je možné vykonať pre jednotlivé SELECT dotazy alebo pre celý dotaz po zreťazení.

Účelom SQL_CALC_FOUND_ROWS pre UNION je, že by mal vrátiť počet riadkov, ktoré budú vrátené bez globálneho LIMITU. Podmienky používania SQL_CALC_FOUND_ROWS s UNION sú uvedené nižšie:

  • Kľúčové slovo SQL_CALC_FOUND_ROWS musí byť špecifikované v prvom príkaze SELECT.
  • FOUND_ROWS () bude presné iba vtedy, ak sa použije UNION ALL. Ak je zadaná UNION bez ALL, dôjde k duplicitnej eliminácii a FOUND_ROWS () je len približné.
  • Ak UNION neobsahuje LIMIT, potom sa SQL_CALC_FOUND_ROWS ignoruje a vráti sa počet riadkov v dočasnej tabuľke, ktorá je vytvorená na vykonanie UNION.

Raz som sa s týmto problémom stretol, ale veľa riešení ponúkaných na internete mi nefungovalo. A predsa som našiel cestu von. A dokonca ani jeden.

Metóda 1.phpMyAdmin

Začnime tým najjednoduchším a najzrejmejším. Povedzme, že nepotrebujete použiť výsledok v kóde, ale stačí zistiť počet riadkov, to je všetko.

Potom prejdite na phpMyAdmin (localhost / tools / phpmyadmin - pre Denver), potom vyberte požadovanú databázu, potom vyberte tabuľku, počet riadkov, v ktorých chcete zistiť, a zobrazí sa nasledujúca správa:

Metóda 2. POČÍTAJTE

Takto vyzerá samotný SQL dotaz:

SQL dotaz s podmienkou:

PHP implementácia:

Podobne tu môžete pridať podmienku. Potom kód zobrazí počet riadkov v tabuľke, ktoré spĺňajú podmienku.

Metóda 3.mysql_num_rows

Napríklad vo WordPresse sa príspevky ukladajú do tabuľky wp_posts, takže vieme zistiť, koľko príspevkov (príspevkov) je uložených v databáze (v MySQL tabuľke). Tento kód je uvedený len napríklad (alebo pre prípady, keď nie je načítané prostredie WordPress), keďže vo WordPress sa pripojenie k databáze vykonáva cez triedu.

Výsledok bude zahŕňať úplne všetky záznamy. A ako zistiť počet len ​​tých, ktoré sú zverejnené? Aby sme to dosiahli, musíme trochu zmeniť SQL dotaz.