Mysql php na nagbibilang ng bilang ng mga hilera. Pagpili at pagbibilang ng mga hilera sa isang query - SQL_CALC_FOUND_ROWS. Pagtukoy sa bilang ng mga tala sa PHP

Upang matukoy ang bilang ng mga tala sa isang talahanayan ng MySQL, kailangan mong gamitin ang espesyal na COUNT() function.

Ibinabalik ng function na COUNT() ang bilang ng mga tala sa isang talahanayan na tumutugma sa isang ibinigay na pamantayan.

Ang COUNT(expr) function ay palaging binibilang lamang ang mga row kung saan ang resulta ng expr ay NOT NULL .

Ang pagbubukod sa panuntunang ito ay kapag ginagamit ang COUNT() function na may asterisk bilang argumento - COUNT(*) . Sa kasong ito, ang lahat ng mga hilera ay binibilang, hindi alintana kung sila ay NULL o HINDI NULL.

Halimbawa, ibinabalik ng function na COUNT(*) ang kabuuang bilang ng mga tala sa talahanayan:

PUMILI NG COUNT(*) MULA sa table_name

Paano bilangin ang bilang ng mga tala at ipakita ang mga ito sa screen

Halimbawa PHP+MySQL code para sa pagbibilang at pagpapakita ng kabuuang bilang ng mga row:

$res = mysql_query("SELECT COUNT(*) FROM table_name") $row = mysql_fetch_row($res); $kabuuan = $row; // kabuuang mga tala echo $total; ?>

Ang halimbawang ito ay naglalarawan ng pinakasimpleng paggamit ng COUNT() function. Ngunit maaari ka ring magsagawa ng iba pang mga gawain gamit ang function na ito.

Sa pamamagitan ng pagtukoy ng isang partikular na column ng talahanayan bilang isang parameter, ibinabalik ng function na COUNT(column_name) ang bilang ng mga tala sa column na iyon na hindi naglalaman ng NULL na halaga. Ang mga rekord na may NULL na mga halaga ay hindi pinapansin.

PUMILI NG COUNT(column_name) MULA sa table_name

Ang mysql_num_rows() function ay hindi maaaring gamitin dahil upang malaman ang kabuuang bilang ng mga tala, kailangan mong magpatakbo ng isang SELECT * FROM db query, iyon ay, makuha ang lahat ng mga tala, at ito ay hindi kanais-nais, kaya mas mainam na gamitin ang count function.

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

Gamit ang function na COUNT() bilang isang halimbawa

Narito ang isa pang halimbawa ng paggamit ng COUNT() function. Sabihin nating mayroong isang table na ice_cream na may isang ice cream catalog, na naglalaman ng mga identifier ng kategorya at mga pangalan ng ice cream.

Simula sa bersyon 4.0, ang MySQL DBMS ay may isang medyo maginhawang kakayahang bilangin ang bilang ng lahat ng mga tala na tumutugma sa isang query, kapag ang bilang ng mga tala ay limitado ng LIMIT. Kapag nagtatrabaho sa mga paghahanap sa database, pati na rin kapag pumipili mula sa mga talahanayan na may malaking bilang ng mga talaan, ang naturang pag-andar ay kailangan lang.

Syntax. Sa isang SELECT query, dapat mong tukuyin ang SQL_CALC_FOUND_ROWS na opsyon bago ang listahan ng mga column. Narito ang simula sa syntax ng SELECT construct.

PUMILI




select_expr, … …

Kaya, kapag isinasagawa ang SELECT SQL_CALC_FOUND_ROWS query, bibilangin ng DBMS ang kabuuang bilang ng mga row na tumutugma sa kondisyon ng query at iimbak ang numerong ito sa memorya. Natural, ang SELECT SQL_CALC_FOUND_ROWS query ay may katuturan lamang kapag gumagamit ng limitasyon (LIMIT). Kaagad pagkatapos isagawa ang query sa pagpili, upang makuha ang bilang ng mga tala, kailangan mong magsagawa ng isa pang SELECT query: SELECT FOUND_ROWS ();. Bilang resulta, ang MySQL ay magbabalik ng isang hilera na may isang patlang kung saan ang bilang ng mga hilera ay maiimbak.

Isang halimbawa ng mga kahilingan mismo:

> PUMILI SQL_CALC_FOUND_ROWS * MULA tbl_name WHERE numero > 100 LIMIT 10;
> PUMILI FOUND_ROWS();

Ang unang query ay magbabalik (output) ng 10 row ng table tbl_name kung saan ang condition number > 100 ay totoo. ang LIMIT expression. Bagama't ang paggamit ng SELECT SQL_CALC_FOUND_ROWS command ay nangangailangan ng MySQL na muling kalkulahin ang lahat ng mga row sa set ng resulta, mas mabilis pa rin ito kaysa sa walang LIMIT dahil hindi nito kailangang ipadala ang resulta sa kliyente.

Mga halimbawang kahilingan mula sa PHP:

$result = mysql_query("SELECT SQL_CALC_FOUND_ROWS * MULA sa table1 LIMIT 0, 10″, $link);
habang ($row = mysql_fetch_assoc($result))
{
var_dump($row);
}

$result = mysql_query("SELECT FOUND_ROWS()", $link);
$num_rows = mysql_result($result, 0);
echo "$num_rows Rows\n";

Bilang resulta ng pagpapatupad ng code, sa kondisyon na ang $link ay tumuturo sa isang bukas na koneksyon sa DBMS, maglalabas ang PHP ng 10 row mula sa table1 , na sinusundan ng isang integer na halaga ng bilang ng mga row na tumutugma sa query (hindi pinapansin ang LIMIT).

Sa mga query sa UNION, ang SQL_CALC_FOUND_ROWS ay maaaring kumilos sa dalawang paraan dahil sa katotohanan na ang LIMIT ay maaaring lumitaw sa maraming lugar. Maaaring panatilihin ang mga bilang ng row para sa mga indibidwal na SELECT query, o para sa buong query pagkatapos ng pagsasama.

Ang layunin ng SQL_CALC_FOUND_ROWS para sa UNION ay dapat nitong ibalik ang bilang ng mga row na ibabalik nang walang pandaigdigang LIMIT. Ang mga kundisyon para sa paggamit ng SQL_CALC_FOUND_ROWS sa UNION ay nakalista sa ibaba:

  • Ang SQL_CALC_FOUND_ROWS keyword ay dapat na tinukoy sa unang SELECT statement.
  • Ang halaga ng FOUND_ROWS() ay magiging tumpak lamang kung gagamitin ang UNION ALL. Kung ang UNION ay tinukoy nang walang LAHAT, magaganap ang duplicate na pag-aalis at ang halaga ng FOUND_ROWS() ay tinatantya lamang.
  • Kung wala ang LIMIT sa UNION, babalewalain ang SQL_CALC_FOUND_ROWS at ibabalik ang bilang ng mga row sa pansamantalang talahanayan na ginawa upang isagawa ang UNION.

Mula sa may-akda: sabi ng isa sa mga kaibigan ko na may Santa Claus. Naniwala siya sa kanya matapos mabigyan ng 10 kg ng tsokolate ang kanyang bunsong anak para sa Bagong Taon. Ngayon sa susunod na taon ay kailangan nating humingi kay Santa Claus para sa pagpuno para sa lahat ng miyembro ng pamilya! Sa kabutihang palad, sa web programming maaari mong i-play ito nang ligtas laban sa mga naturang sorpresa at matukoy ang bilang ng mga hilera sa MySQL nang maaga.

Bakit alam kung magkano?

Ang anumang talahanayan ay binubuo ng mga column at row. Ang halagang nakaimbak sa database ay depende sa kung gaano karaming mga hilera ang nakapaloob sa bawat isa sa mga talahanayan nito.

Kung paanong ang bilang ng mga butas sa ngipin ng isang tao ay nakasalalay sa dami ng kendi na dati nang kinakain. Mas tiyak, mula sa kabuuang bigat ng mga matamis na "regalo" sa iyong anak para sa Bagong Taon.

Malinaw na ang isang malaking bilang ng mga hilera sa database ng MySQL ay hindi magdaragdag ng mga pagpuno sa iyong bibig, ngunit gayunpaman, ang kaalaman sa parameter na ito ay maaaring kailanganin kapag nag-optimize sa pagpapatakbo ng iyong site, upang magpatakbo ng ilang mga script, atbp.

Madali lang!

Upang makuha ang bilang ng mga row sa MySQL, hindi mo kailangang maging matalino sa pagbuo ng mga query sa SQL. Buksan lamang ang nais na talahanayan sa shell ng programa at tingnan ang id ng huling hilera. Ang column na ito ang pinakamadalas na ginagamit bilang isang natatanging key, at ang halaga nito ay awtomatikong nabuo (auto-increment) sa pamamagitan ng pagdaragdag ng isa (+1) sa nauna.

Upang patunayan ang "axiom" na ito, buksan natin ang isang talahanayan sa anumang database sa phpMyAdmin. Halimbawa, ang hayop sa mesa. Tulad ng makikita mo sa screenshot, ang halaga ng column ng id ay napupunta sa pagkakasunud-sunod, mula 1 hanggang ... Kaya, itabi ito! Saan tumakas ang pusang may “identification number” 4? Malamang natakot na naman siya sa "aso" number 5 at 6

Sa database ng MySQL na ito, mabibilang mo lang ang bilang ng mga hilera sa isang talahanayan “sa iyong mga daliri”. Ngunit paano kung ang talahanayan ay walang 7 hilera, ngunit ilang daan? Halimbawa, tulad ng sa isang ito.

At isa lang ito sa walong sample na pahina. Sa katunayan, ang bilang ng mga tala ay mabibilang hindi lamang sa daan-daan, kundi pati na rin sa libu-libo. Bukod pa rito, walang id column dahil opsyonal ito. Ang presensya nito ay nakasalalay sa istraktura ng buong database, dahil sa loob nito ang mga halaga ng lahat ng mga hilera ay magkakaugnay. Lumalabas na ang paraan ng pagbilang ng hilera ng MySQL na inilarawan sa itaas ay hindi palaging gumagana.

Ilang tamang pamamaraan

Tulad ng sinasabi nila, ang unang paraan ay bukol, kaya tingnan natin ang ilang mas epektibo at hindi gaanong "simple" na mga pamamaraan:

COUNT() function – ibinabalik ang bilang ng mga row. Ay isang built-in na SQL function. Gayunpaman, alamin natin ang bilang ng mga talaan ng isang malaking talahanayan mula sa database, ang screenshot na ibinigay sa itaas. Request code:

PUMILI NG BILANG(*) MULA SA `bansa`

PUMILI NG BILANG (*) MULA SA `bansa`

Ito ay lumabas na mayroong kasing dami ng 239 na talaan sa talahanayan ng bansa! Malinaw na walang sapat na mga daliri o paa upang mabilang ang mga ito (maliban kung gagamitin mo ang mga paa ng ibang tao o hayop)). Tulad ng nakikita mo, ang pamamaraang ito ng pagbibilang ng bilang ng mga hilera sa MySQL ay gumagana nang mas tumpak at kadalasang ginagamit.

Ngunit ang function na ito ay higit pa sa nagagawa! Halimbawa, magagamit mo ito para malaman kung ilan sa mga bansang “kinakatawan” sa database ang nasa Europe:

At kung gaano karaming beses binanggit ang bawat bansa sa talahanayan. Halimbawa ng kahilingan:

PUMILI `Pangalan` , COUNT(*) MULA SA `bansa` GROUP NG `Pangalan`

PILIIN ` Pangalan ` , COUNT (* ) MULA SA ` bansa ` GROUP BY ` Pangalan `

Gamit ang query na ito, nalaman namin ang bilang ng mga row sa MySQL na nagbabanggit sa bawat bansa. Mula sa mga resulta ng pagpapatupad nito ay malinaw na minsan sa isang pagkakataon.

Muntik ko ng makalimutan! Kung wala ka pang world database, na pinagtatrabahuhan namin ngayon, maaari mo itong i-download mula dito link mula sa opisyal na website ng mga developer ng MySQL DBMS. Pagkatapos i-download ang archive kasama nito, kailangan mong i-unzip ito at pagkatapos ay i-import ito mula sa database server. Sa phpMyAdmin, ito ay maaaring gawin sa pamamagitan ng “Import” main menu item.

Napag-usapan ko ang tungkol sa pamamaraang ito nang mas detalyado sa isa sa mga nakaraang materyales.

MAX() function - sa ilang mga kaso, pinapayagan din nito ang MySQL na malaman ang bilang ng mga row sa isang table. Bakit minsan? magpapaliwanag ako ngayon. Alalahanin ang unang paraan ng pagbibilang na tiningnan natin sa simula. Ipinahihiwatig nito na ang pinakamalaking halaga ng column ng id ay katumbas ng bilang ng mga tala. Ang paggamit ng function na ito ay isang uri ng "automation" ng paraang iyon. Ibinabalik ng MAX() ang maximum na halaga ng tinukoy na column (id). Upang subukan ang function, gagamitin namin ang talahanayan ng lungsod, na bahagi din ng database ng mundo. Request code:

PUMILI NG MAX(`ID`) MULA SA `lungsod`

PUMILI NG MAX (`ID`) MULA SA `city`

Bilang resulta ng query, natanggap namin ang halaga ng column ng huling row. Lumalabas na binilang ng MySQL ang bilang ng mga hilera.

Kung kinakailangan, maaari mong makuha ang huling tala sa kabuuan nito:

PILIIN ang MAX(`ID`),`Pangalan`,`CountryCode`,`Distrito`,`Populasyon` MULA SA `lungsod`

PUMILI NG MAX (`ID`), `Pangalan`, `CountryCode`, `Distrito`, `Populasyon` MULA sa `lungsod`

Pakitandaan na para sa pagpili, bago tawagan ang function, sa halip na "*" ay inilista namin ang mga pangalan ng lahat ng mga column. Ito ay isang tampok na syntax kapag gumagamit ng mga built-in na function sa MySQL.

Pagtukoy sa bilang ng mga tala sa PHP

Kadalasan sa code ng PHP MySQL site, ang bilang ng mga row ay kailangang makuha upang pagkatapos ay maipasa ang halagang ito bilang input parameter para sa karagdagang pagproseso. Magagawa ito gamit ang sumusunod na code:

query("PUMILI * MULA SA `bansa`")) ( printf("Ang talahanayan ay may %d na hanay.\n", $result->num_rows); $result->close(); ) mysqli_close($con); ?>

Minsan ay nahaharap ako sa problemang ito, ngunit marami sa mga solusyon na inaalok sa Internet ay hindi gumana para sa akin. At gayunpaman, nakahanap ako ng paraan. At hindi rin nag-iisa.

Paraan 1. phpMyAdmin

Magsimula tayo sa pinakasimple at pinaka-halata. Sabihin nating hindi mo kailangang gamitin ang resulta sa code, ngunit alamin lamang ang bilang ng mga linya, iyon lang.

Pagkatapos ay pumunta sa phpMyAdmin (localhost/tools/phpmyadmin - para sa Denver), pagkatapos ay piliin ang nais na database, pagkatapos ay piliin ang talahanayan, ang bilang ng mga hilera kung saan kailangan mong malaman, at tingnan ang sumusunod na mensahe:

Paraan 2. COUNT

Ito ang hitsura ng SQL query mismo:

SQL query na may kundisyon:

Pagpapatupad sa PHP:

Katulad nito, maaari kang magdagdag ng kundisyon dito. Pagkatapos ay ipapakita ng code ang bilang ng mga hilera sa talahanayan na nakakatugon sa kundisyon.

Paraan 3: mysql_num_rows

Halimbawa, sa WordPress, ang mga post ay nakaimbak sa wp_posts table, para malaman natin kung gaano karaming mga post (post) ang nakaimbak sa database (sa MySQL table). Ang code na ito ay ibinigay halimbawa lamang (o para sa mga kaso kapag ang kapaligiran ng WordPress ay hindi na-load), dahil sa WordPress, ang pagkonekta sa database ay ginagawa sa pamamagitan ng .

Ang resulta ay ganap na isasama ang lahat ng mga tala. Paano ko malalaman ang bilang lamang ng mga na-publish? Para magawa ito, kakailanganin nating bahagyang baguhin ang SQL query.

 
Mga artikulo Sa pamamagitan ng paksa:
3 Hindi ma-verify ang digital signature
Minsan ang mga problema ay maaaring lumitaw kapag nag-install ng ganap na anumang driver. Isa na rito ang problema sa pag-check ng digital signature ng driver. Ang katotohanan ay sa pamamagitan ng default maaari kang mag-install lamang ng software na may lagda. Bukod dito, ang lagda na ito ay dapat
tpl template Dle ang kanilang layunin
Ang DataLife Engine v.7.5 (DLE) ay isang multi-user news engine na may mahusay na functionality. Ang makina ay pangunahing inilaan para sa paglikha ng mga blog ng balita at mga site na may malaking konteksto ng impormasyon. Gayunpaman, mayroon siya
Overclocking ng monitor matrix - teorya at kasanayan Mga kinakailangan sa computer
Sa tingin ko karamihan sa mga gumagamit ng PC ay narinig ang tungkol sa katotohanan na maaari mong i-overclock ang isang processor, video card o RAM. Gayunpaman, kakaunti ang nakakaalam na maaari mo ring i-overclock ang isang monitor, at kadalasan ang pagkakaiba mula sa overclocking ay mas makabuluhan at kapansin-pansin kaysa sa overclocking ng isa pa.
Bago i-on ang bagong UPS (nagcha-charge ng mga baterya, pagsubok, atbp.)
Ang ginagamit ng mga tao sa pang-araw-araw na buhay ay may kasamang baterya at boltahe na inverter. Ang mas kumplikadong mga baterya ay may pinalawak na pag-andar at isang mas malaking bilang ng mga baterya na konektado sa isa't isa nang magkatulad. Saktong may pom