Şərti ilə Mysql sıra sayı. Bir sorğuda sətirlərin seçilməsi və sayılması - SQL_CALC_FOUND_ROWS

Müəllifdən: dostlarımdan biri Santa Klausun mövcud olduğunu iddia edir. Kiçik oğluna Yeni il üçün 10 kq şokolad verəndən sonra ona inanıb. İndi gələn il biz bütün ailə üzvləri üçün Şaxta babadan içlik istəməli olacağıq! Xoşbəxtlikdən, veb proqramlaşdırmada siz onu bu cür sürprizlərə qarşı təhlükəsiz oynaya və MySQL-də cərgələrin sayını əvvəlcədən müəyyən edə bilərsiniz.

Nə qədər bilirsən niyə?

İstənilən cədvəl sütun və sətirlərdən ibarətdir. Verilənlər bazasında saxlanılan məbləğ onun cədvəllərinin hər birində neçə sətir olduğundan asılıdır.

Necə ki, insanın dişlərindəki dəliklərin sayı əvvəllər yeyilən konfetin miqdarından asılıdır. Daha doğrusu, yeni il üçün uşağınıza “hədiyyə olunan” şirniyyatların ümumi çəkisindən.

Aydındır ki, MySQL verilənlər bazasında çoxlu sayda cərgələr ağzınıza plomb əlavə etməyəcək, lakin yenə də saytınızın işini optimallaşdırarkən, bəzi skriptləri işə salarkən və s. bu parametr haqqında bilik tələb oluna bilər.

Asanlıqla!

MySQL-də sətirlərin sayını əldə etmək üçün SQL sorğularını tərtib etməkdə ağıllı olmaq lazım deyil. Sadəcə proqram qabığında istədiyiniz cədvəli açın və sonuncu sətirin id-sinə baxın. Məhz bu sütun ən çox unikal açar kimi istifadə olunur və onun dəyəri əvvəlki birinə (+1) artırılmaqla avtomatik olaraq (avtomatik artım) yaradılır.

Bu “aksiomu” sübut etmək üçün gəlin phpMyAdmin-də istənilən verilənlər bazasında cədvəl açaq. Məsələn, süfrə heyvanı. Ekran görüntüsündə gördüyünüz kimi, id sütununun dəyəri sıra ilə gedir, 1-dən... Odur ki, onu kənara qoyun! “İdentifikasiya nömrəsi” 4 olan pişik hara qaçdı? O, yəqin ki, yenə 5 və 6 nömrəli “itlərdən” qorxurdu

Bu MySQL verilənlər bazasında siz sadəcə olaraq cədvəldəki sətirlərin sayını “barmaqlarınızla” saya bilərsiniz. Bəs cədvəldə 7 cərgə yox, bir neçə yüz cərgə olsa nə olar? Məsələn, bu kimi.

Və bu səkkiz nümunə səhifədən yalnız biridir. Əslində qeydlərin sayını yüzlərlə deyil, minlərlə saymaq olar. Əlavə olaraq, id sütunu yoxdur, çünki isteğe bağlıdır. Onun mövcudluğu bütün verilənlər bazasının strukturundan asılıdır, çünki onda bütün sətirlərin dəyərləri bir-birinə bağlıdır. Məlum olub ki, yuxarıda təsvir edilən MySQL cərgə sayma üsulu həmişə işləmir.

Bir neçə düzgün üsul

Necə deyərlər, birinci üsul yumrudur, ona görə də gəlin bir neçə daha təsirli və daha az “sadə” üsula baxaq:

COUNT() funksiyası – sətirlərin sayını qaytarır. Daxili SQL funksiyasıdır. Yenə də, ekran görüntüsü yuxarıda verilmiş verilənlər bazasından böyük bir cədvəlin qeydlərinin sayını öyrənək. Sorğu kodu:

'Ölkə'DƏN COUNT(*) SEÇİN

'Ölkə'DƏN COUNT (*) SEÇİN

Belə çıxır ki, ölkə cədvəlində 239 rekord var! Aydındır ki, onları saymaq üçün barmaqlar və ayaq barmaqları kifayət deyil (başqa insanların və ya heyvanların əzalarını istifadə etməsəniz)). Gördüyünüz kimi, MySQL-də sətirlərin sayını hesablamaq üçün bu üsul daha dəqiq işləyir və ən çox istifadə olunur.

Ancaq bu funksiya bundan daha çoxunu edir! Məsələn, verilənlər bazasında “təmsil olunan” ölkələrin neçəsinin Avropada olduğunu öyrənmək üçün ondan istifadə edə bilərsiniz:

Həm də cədvəldə hər bir ölkə neçə dəfə qeyd olunur. Müraciət nümunəsi:

`Ölkə` QRUPUNDAN `Ad` , COUNT(*) `Ad` SEÇİN

SEÇİN ` Ad ` , COUNT (* ) FROM ` ölkə ` QRUP BY ` Adı `

Bu sorğudan istifadə edərək, MySQL-də hər bir ölkəni qeyd edən sətirlərin sayını öyrəndik. Onun icrasının nəticələrindən aydın olur ki, bir dəfə.

Demək olar ki, unutdum! Əgər sizdə bu gün işlədiyimiz dünya məlumat bazası yoxdursa, onu MySQL DBMS tərtibatçılarının rəsmi saytından bu linkdən yükləyə bilərsiniz. Arxivi onunla yüklədikdən sonra onu açmaq və sonra verilənlər bazası serverindən idxal etmək lazımdır. PhpMyAdmin-də bunu “İdxal” əsas menyu elementi vasitəsilə etmək olar.

Bu prosedur haqqında əvvəlki materiallardan birində daha ətraflı danışdım.

MAX() funksiyası – bəzi hallarda MySQL-ə cədvəldəki sətirlərin sayını öyrənməyə də imkan verir. Niyə bəzən? İndi izah edəcəyəm. Əvvəldə baxdığımız ilk sayma üsulunu xatırlayın. Bu, id sütununun ən böyük dəyərinin qeydlərin sayına bərabər olduğunu nəzərdə tutur. Bu funksiyadan istifadə həmin metodun bir növ “avtomatlaşdırılmasıdır”. MAX() göstərilən sütunun (id) maksimum dəyərini qaytarır. Funksiyanı yoxlamaq üçün biz dünya məlumat bazasının bir hissəsi olan şəhər cədvəlindən istifadə edəcəyik. Sorğu kodu:

'şəhər'DƏN MAX('ID') SEÇİN

'şəhər'DƏN MAX ('ID') SEÇİN

Sorğunun nəticəsi olaraq sonuncu sətirin sütununun qiymətini aldıq. Belə çıxır ki, MySQL sətirlərin sayını hesablayıb.

Lazım gələrsə, son qeydi tam şəkildə əldə edə bilərsiniz:

MAX(`ID`),`Ad`,`Ölkə Kodu`,`Rayon`,`Əhali` `şəhər`DƏN SEÇİN

MAX ('ID'), 'Ad', 'Ölkə Kodu', 'Rayon', 'Şəhər'DƏN 'Əhali' SEÇİN

Nəzərə alın ki, funksiyanı seçmək üçün “*” əvəzinə bütün sütunların adlarını qeyd edirik. MySQL-də daxili funksiyalardan istifadə edərkən bu sintaksis xüsusiyyətidir.

PHP-də qeydlərin sayının müəyyən edilməsi

Çox vaxt PHP MySQL saytlarının kodunda bu dəyəri sonrakı emal üçün giriş parametri kimi ötürmək üçün sətirlərin sayı əldə edilməlidir. Bu, aşağıdakı kodla edilə bilər:

query("SELECT * FROM `ölkə`")) ( printf("Cədvəldə %d sıra var.\n", $nəticə->sayı_sətir); $nəticə->close(); ) mysqli_close($con); ?>

MySQL cədvəlindəki qeydlərin sayını müəyyən etmək üçün xüsusi COUNT() funksiyasından istifadə etməlisiniz.

COUNT() funksiyası cədvəldə verilən kriteriyaya uyğun gələn qeydlərin sayını qaytarır.

COUNT(ifadə) funksiyası həmişə yalnız ifadənin nəticəsi NULL DEYİL sətirləri hesablayır.

Bu qaydanın istisnası, COUNT() funksiyasının arqument kimi ulduz işarəsi ilə istifadə edilməsidir - COUNT(*) . Bu halda, NULL və ya NO NULL olmasından asılı olmayaraq, bütün sətirlər sayılır.

Məsələn, COUNT(*) funksiyası cədvəldəki qeydlərin ümumi sayını qaytarır:

Cədvəl_adından COUNT(*) SEÇİN

Yazıların sayını necə hesablamaq və onları ekranda göstərmək olar

Sətirlərin ümumi sayını hesablamaq və göstərmək üçün PHP+MySQL kodu nümunəsi:

$res = mysql_query("Cədvəl_adından COUNT(*) SEÇİN") $sətir = mysql_fetch_row($res); $cəmi = $sətir; // cəmi qeydlər əks-səda $total; ?>

Bu nümunə COUNT() funksiyasının ən sadə istifadəsini göstərir. Lakin siz bu funksiyadan istifadə edərək başqa tapşırıqları da yerinə yetirə bilərsiniz.

Xüsusi cədvəl sütununu parametr kimi təyin etməklə, COUNT(sütun_adı) funksiyası həmin sütunda NULL dəyəri olmayan qeydlərin sayını qaytarır. NULL dəyərləri olan qeydlər nəzərə alınmır.

Cədvəl_adından COUNT(sütun_adı) SEÇİN

mysql_num_rows() funksiyasından istifadə etmək mümkün deyil, çünki qeydlərin ümumi sayını öyrənmək üçün siz SELECT * FROM db sorğusunu icra etməlisiniz, yəni bütün qeydləri əldə etməlisiniz və bu arzuolunmazdır, ona görə də ona üstünlük verilir. sayma funksiyasından istifadə edin.

$nəticə = mysql_query("SAYI (*) db-dən qeyd kimi SEÇİN");

Nümunə olaraq COUNT() funksiyasından istifadə edin

COUNT() funksiyasından istifadənin başqa bir nümunəsidir. Deyək ki, kateqoriya identifikatorlarını və dondurma adlarını ehtiva edən dondurma kataloqu olan bir masa dondurması var.

Mən bir dəfə bu problemlə qarşılaşdım, lakin İnternetdə təklif olunan bir çox həll yolu mənim üçün işləmədi. Və yenə də çıxış yolu tapdım. Və hətta tək deyil.

Metod 1. phpMyAdmin

Ən sadə və ən aydın olandan başlayaq. Tutaq ki, nəticəni kodda istifadə etmək lazım deyil, sadəcə olaraq sətirlərin sayını öyrənin, bu qədər.

Sonra phpMyAdmin (localhost/tools/phpmyadmin - Denver üçün) gedin, sonra istədiyiniz verilənlər bazasını seçin, sonra cədvəli, öyrənmək istədiyiniz sətirlərin sayını seçin və aşağıdakı mesaja baxın:

Metod 2. COUNT

SQL sorğusunun özü belə görünür:

Şərtlə SQL sorğusu:

PHP-də tətbiq:

Eynilə, burada bir şərt əlavə edə bilərsiniz. Sonra kod cədvəldə şərti ödəyən sətirlərin sayını göstərəcək.

Metod 3: mysql_num_rows

Məsələn, WordPress-də yazılar wp_posts cədvəlində saxlanılır, ona görə də verilənlər bazasında (MySQL cədvəlində) neçə yazının (yazıların) saxlandığını öyrənə bilərik. Bu kod, məsələn, yalnız (və ya WordPress mühitinin yüklənmədiyi hallar üçün) verilir, çünki WordPress-də verilənlər bazasına qoşulma .

Nəticə tamamilə bütün qeydləri əhatə edəcəkdir. Yalnız dərc olunanların sayını necə öyrənə bilərəm? Bunun üçün SQL sorğusunu bir qədər dəyişməli olacağıq.

4.0 versiyasından başlayaraq MySQL DBMS, qeydlərin sayı LIMIT ilə məhdudlaşdıqda, sorğuya uyğun gələn bütün qeydlərin sayını hesablamaq üçün kifayət qədər rahat bir qabiliyyətə malikdir. Verilənlər bazası axtarışları ilə işləyərkən, həmçinin çoxlu sayda qeydləri olan cədvəllərdən seçim edərkən belə funksionallıq sadəcə zəruridir.

Sintaksis. SELECT sorğusunda siz sütunlar siyahısından əvvəl SQL_CALC_FOUND_ROWS seçimini göstərməlisiniz. SELECT konstruksiyasının sintaksisinin başlanğıcı budur.

SEÇİN




select_expr, … …

Beləliklə, SELECT SQL_CALC_FOUND_ROWS sorğusunu yerinə yetirərkən DBMS sorğunun şərtinə uyğun gələn cərgələrin ümumi sayını hesablayacaq və bu nömrəni yaddaşda saxlayacaq. Təbii ki, SELECT SQL_CALC_FOUND_ROWS sorğusu yalnız limitdən (LIMIT) istifadə edərkən məna kəsb edir. Seçim sorğusunu yerinə yetirdikdən dərhal sonra qeydlərin sayını əldə etmək üçün başqa bir SELECT sorğusunu yerinə yetirməlisiniz: SELECT FOUND_ROWS ();. Nəticədə, MySQL satır sayının saxlanacağı bir sahə ilə bir sıra qaytaracaq.

Müraciətlərin özlərinə bir nümunə:

> SEÇİN SQL_CALC_FOUND_ROWS * FROM tbl_name HARADA sayı > 100 LIMIT 10;
> SEÇİN FOUND_ROWS();

Birinci sorğu şərt nömrəsinin > 100 olduğu tbl_name cədvəlinin 10 cərgəsini qaytaracaq (çıxış) SELECT əmrinə ikinci çağırış, birinci SELECT əmri olmadan yazılsaydı qaytaracağı sətirlərin sayını qaytaracaq. LIMIT ifadəsi. Baxmayaraq ki, SELECT SQL_CALC_FOUND_ROWS əmrindən istifadə MySQL-dən nəticə dəstindəki bütün sətirlərin yenidən hesablanması tələb olunsa da, o, nəticəni müştəriyə göndərmək məcburiyyətində olmadığı üçün LIMIT olmadan olduğundan daha sürətlidir.

PHP-dən nümunə sorğular:

$nəticə = mysql_query("SEÇ SQL_CALC_FOUND_ROWS * Cədvəl 1 LIMIT 0, 10″, $link);
isə ($sətir = mysql_fetch_assoc($nəticə))
{
var_dump($sətir);
}

$nəticə = mysql_query("SEÇ FOUND_ROWS()", $link);
$sayı_sətir = mysql_nəticə($nəticə, 0);
echo "$sayı_sətirlər\n";

Kodun icrası nəticəsində, $link DBMS ilə açıq əlaqəyə işarə etmək şərti ilə, PHP cədvəl cədvəlindən 10 sətir çap edəcək1 , sonra isə sorğuya uyğun gələn sətirlərin sayının tam dəyərini çap edəcək (LIMIT-ə məhəl qoymayaraq).

UNION sorğularında SQL_CALC_FOUND_ROWS iki şəkildə davrana bilər, çünki LIMIT çox yerdə görünə bilər. Sətirlərin hesablanması fərdi SELECT sorğuları üçün və ya birləşdirildikdən sonra bütün sorğu üçün edilə bilər.

UNION üçün SQL_CALC_FOUND_ROWS məqsədi ondan ibarətdir ki, o, qlobal LIMIT olmadan qaytarılacaq sətirlərin sayını qaytarmalıdır. UNION ilə SQL_CALC_FOUND_ROWS istifadə şərtləri aşağıda verilmişdir:

  • SQL_CALC_FOUND_ROWS açar sözü birinci SELECT ifadəsində göstərilməlidir.
  • FOUND_ROWS() dəyəri yalnız UNION ALL istifadə edildikdə dəqiq olacaq. Əgər UNION ALL olmadan göstərilibsə, dublikatın aradan qaldırılması baş verir və FOUND_ROWS() dəyəri yalnız təxmini olacaq.
  • Əgər UNION-da LIMIT yoxdursa, SQL_CALC_FOUND_ROWS nəzərə alınmır və müvəqqəti cədvəldə UNION-u yerinə yetirmək üçün yaradılmış sətirlərin sayı qaytarılır.


Əlaqədar nəşrlər