Mysql რიგების კორექტირება. რიგების არჩევა და განახლება ერთი ნაბიჯით – SQL_CALC_FOUND_ROWS. სწორი მეთოდების ჩამონათვალი

გოლოვნა / ავაშენებ დასუფთავების ადგილს

ავტორის შეხედულება:ჩემი ერთ-ერთი მეგობარი ადასტურებს, რომ თოვლის ბაბუას სძინავს. ამის შემდეგ, როგორც მისი მცირეწლოვანი შვილი, ირწმუნა ახალი მდინარეწარმოადგინა 10 კგ შოკოლადის ცუკერკი. ახლა, მომავალ ბედში, თქვენ მოგიწევთ თოვლის ბაბუას სთხოვოთ შევსება თქვენი ოჯახის ყველა წევრისთვის! საბედნიეროდ, ვებ პროგრამულ უზრუნველყოფას შეუძლია უსაფრთხოდ ითამაშოს ასეთი შეუსაბამობების წინააღმდეგ და ისარგებლოს მომავალში MySQL-ში რიგების რაოდენობით.

რა იცი, რამდენი?

ნებისმიერი ცხრილი შედგება ასობით მწკრივისაგან და მწკრივისაგან. მონაცემთა ბაზაში დანაზოგის რაოდენობა დამოკიდებულია იმაზე, თუ რამდენი მწკრივია თითოეულ ცხრილში.

ეს არის ადამიანის კბილებში არსებული ხვრელების რაოდენობის მსგავსი, რომლებიც ადრე ნაჭამი ცუკკეროკის უკან დევს. უფრო სწორედ, ალაოს მწარმოებლების სიბინძურისგან, რომლებთანაც თქვენი შვილი „აჩუქეს“ ახალ მდინარეზე.

ნათელია, რომ მიუხედავად რიგების დიდი რაოდენობისა MySQL მონაცემთა ბაზათქვენ ვერ შეძლებთ კომპანიისგან ბეჭედის მიღებას, მაგრამ მაინც, ამ პარამეტრის ცოდნა შეიძლება დაგჭირდეთ თქვენი საიტის მუშაობის ოპტიმიზაციისას, გარკვეული სკრიპტების გასაშვებად და ა.შ.

მარტივად!

MySQL-ში რიგი მწკრივების შესაქმნელად, არ არის აუცილებელი დაკეცილი SQL მოთხოვნების „გაგება“. უბრალოდ გახსენით საჭირო ცხრილი პროგრამის გარსში და ნახეთ დარჩენილი მწკრივის ID. ეს თავისთავად ყველაზე ხშირად განიხილება, როგორც უნიკალური გასაღები და მისი მნიშვნელობა გენერირებულია ავტომატურად (ავტომატური ზრდა) ერთის (+1) წინაზე გაზრდით.

ამ "აქსიომის" დასასრულებლად, მოდით შევქმნათ ცხრილი phpMyAdmin-ში ნებისმიერი მონაცემთა ბაზისთვის. მაგალითად, სუფრის ცხოველი. როგორც სკრინშოტში ხედავთ, ID მნიშვნელობები წესრიგშია, 1-დან... ასე რომ, ჩადეთ! სად წავიდა კატა "საიდენტიფიკაციო ნომრით" 4? გაბრაზებულად ვეძახი "ძაღლს" 5 და 6 ნომრების ქვეშ, გაბრაზებული

ამ MySQL მონაცემთა ბაზაში შეგიძლიათ უბრალოდ გაუმკლავდეთ ცხრილის რამდენიმე სტრიქონს. რატომ იმუშაოთ, რადგან მაგიდას აქვს არა 7 სტრიქონი, არამედ ასი? მაგალითად, ასე.

ეს შერჩევის რვა მხრიდან მხოლოდ ერთია. სინამდვილეში, ჩანაწერების რაოდენობა შეიძლება იყოს ასობით ან ათასობით. უფრო მეტიც, აქ არ არის id ელემენტი, რადგან ის არ არის სავალდებულო. ეს აშკარაა მთელი მონაცემთა ბაზის სტრუქტურაში, რადგან ყველა მწკრივის მნიშვნელობები ერთმანეთთან არის დაკავშირებული. გამოდის, რომ არ არსებობს უკეთესი გზა MySQL რიგების შესანარჩუნებლად.

სწორი მეთოდების ჩამონათვალი

როგორც ჩანს, პირველი მეთოდი არის „ერთიანი“, ასე რომ, მოდით გადავხედოთ რამდენიმე ეფექტურ და ნაკლებად „მარტივ“ მეთოდს:

COUNT() ფუნქცია აბრუნებს რიგ მწკრივებს. Є განხორციელებული SQL ფუნქციის გამოყენებით. მიუხედავად ამისა, შესაძლებელია მონაცემთა ბაზიდან დიდ ცხრილში ჩანაწერების რაოდენობის დადგენა, რომლის სკრინშოტიც ზემოთ არის ნაჩვენები. კოდი იქნება:

აირჩიეთ COUNT(*) `ქვეყნიდან`

აირჩიეთ რაოდენობა (*) `ქვეყნიდან`

ქვეყნის ცხრილში სულ 239 ჩანაწერია! გასაგებია, რომ მათი გულისთვის არ უნდა ატარო თითები ან ფეხის თითები (როგორც არ უნდა ჩაეჭიდე სხვა ადამიანების ან არსებების ბოლოები). როგორც ხედავთ, მრავალი მწკრივის განახლების ეს MySQL მეთოდი ბევრად უფრო ზუსტია და სავარაუდოდ გამოსწორდება.

მაგრამ ეს ფუნქცია არ არის ამაზე ნაკლები! მაგალითად, ამ დახმარებით შეგიძლიათ გაიგოთ, რამდენი „წარმომადგენლობა“ არის ქვეყნების მონაცემთა ბაზაში ევროპაში:

და რამდენჯერ გამოიცნობენ ცხრილის კანს? მე ვიკითხავ მაგალითს:

აირჩიეთ `Name`, COUNT(*) FROM `country` GROUP BY `Name`

SELECT ` Name ` , COUNT ( * ) FROM ` country ` GROUP BY ` Name `

ამ დახმარებით ჩვენ აღმოვაჩინეთ რამდენიმე MySQL რიგები, რომლებშიც კიდეებიდან კანის გამოცნობა შეიძლება. Vikonannya-ს შედეგებიდან ირკვევა, რომ ერთ დროს.

დავიწყების გარეშე! თუ ჯერ არ გაქვთ მსოფლიო მონაცემთა ბაზა, რასაც ჩვენ დღეს ვაკეთებთ, მაშინ შეგიძლიათ თვალი ადევნოთ ამ შეტყობინებებს დისტრიბუტორების ოფიციალური ვებსაიტიდან. MySQL DBMS. მისგან არქივების ჩამოტვირთვის შემდეგ, თქვენ უნდა მოხსნათ არქივი და შემდეგ იმპორტი გააკეთოთ მონაცემთა ბაზის სერვერზე. phpMyAdmin-ში ეს შეიძლება გაკეთდეს იმპორტის მთავარი მენიუს ელემენტის მეშვეობით.

ამ პროცედურის შესახებ ანგარიში გამოვაქვეყნე ერთ-ერთ წინა მასალაში.

MAX() ფუნქცია – ზოგიერთ შემთხვევაში, ის ასევე საშუალებას აძლევს MySQL-ს განსაზღვროს რამდენი მწკრივი აქვს ცხრილს. რატომ ინკოლი? ცოტა ხანში აგიხსნით. გაიხსენეთ პირველი გზა როგორ ვუყურებდით კობს. მნიშვნელოვანია აღინიშნოს, რომ რაც უფრო დიდია id სვეტის მნიშვნელობა, უდრის ჩანაწერების რაოდენობას. ამ ფუნქციის განხორციელება ერთგვარი „ავტომატიზაციის“ მეთოდია. MAX() აბრუნებს მითითებული სვეტის (id) მაქსიმალურ მნიშვნელობას. ფუნქციის შესამოწმებლად ვიყენებთ ქალაქის ცხრილს, რომელიც ასევე მოიცავს მსოფლიო მონაცემთა ბაზას. კოდი იქნება:

აირჩიეთ MAX(`ID`) `ქალაქიდან`

აირჩიეთ MAX (`ID`) `ქალაქიდან`

შედეგად, ვიკონიანელებმა წაართვეს დარჩენილი რიგის შპალების ღირებულება. გამოდის, რომ MySQL-მ შეინახა რიგი სტრიქონები.

საჭიროების შემთხვევაში, შეგიძლიათ მთლიანად აირჩიოთ დარჩენილი ჩანაწერი:

SELECT MAX('ID'), 'Name', 'CountryCode', 'District', 'Population' FROM 'City'

SELECT MAX ('ID'), 'Name', 'CountryCode', 'District', 'Population' FROM 'City'

გთხოვთ გაითვალისწინოთ, რომ ფუნქციის არჩევისას დაწკაპუნებამდე შეცვალეთ „*“ ყველა ვარიანტის სახელით. ეს არის სპეციალური სინტაქსი MySQL ფუნქციების გამოყენებისას.

ჩანაწერების რაოდენობა PHP-ში

ხშირად კოდის საიტებზე PHP MySQLსაჭიროა რიგი მწკრივების გამოკლება, რათა შემდეგ გადავიდეს მნიშვნელობა, როგორც შეყვანის პარამეტრი შემდგომი დამუშავებისთვის. შეგიძლიათ გამოიყენოთ შემდეგი დამატებითი კოდი:

query("SELECT * FROM `country`")) ( printf("Table has %d rows\n", $result->num_rows); $result->close(); ) mysqli_close($con); ?>

თითქოს მე წავაწყდი ამ ამოცანებს, მაგრამ მათ არ მომცეს რაიმე გამოსავალი ინტერნეტში განთავსებული. და მაინც ვიცი გამოსავალი. და მე არ ვარ მარტო.

მეთოდი 1. phpMyAdmin

ავიღოთ უმარტივესი და ყველაზე აშკარა. ვთქვათ, თქვენ არ გჭირდებათ შედეგების ამოღება კოდიდან, მაგრამ უბრალოდ გაარკვიეთ რამდენი მწკრივია, ეს ყველაფერია.

შემდეგ გადავდივართ phpMyAdmin-ზე (localhost/tools/phpmyadmin - დენვერისთვის), შემდეგ ვირჩევთ საჭირო მონაცემთა ბაზას, რის შემდეგაც ვირჩევთ ცხრილს, რამდენი სტრიქონის დარეგისტრირება გვჭირდება და ასევე შემდეგ ინფორმაციას:

მეთოდი 2. COUNT

ღერძი ასე გამოიყურება SQL შეკითხვაში:

SQL დაუყოვნებლივ:

დანერგვა PHP-ში:

ასე რომ თქვენ შეგიძლიათ დაამატოთ რამდენიმე ტვინი აქ. ეს კოდი აჩვენებს ცხრილში რიგების რაოდენობას, რომლებიც მიუთითებს გონებაზე.

მეთოდი 3. mysql_num_rows

მაგალითად, WordPress პოსტები ინახება wp_posts ცხრილში, ამ გზით ჩვენ შეგვიძლია გავარკვიოთ რამდენი პოსტი (პოსტი) არის შენახული მონაცემთა ბაზაში (MySQL ცხრილი). ეს კოდი მოცემულია მხოლოდ მაგალითად (ან გამონაკლისისთვის, თუ WordPress შუა არ არის მხარდაჭერილი), რადგან WordPress-ის კავშირი მონაცემთა ბაზასთან ხდება კლასის მეშვეობით.

შედეგი მოიცავს ყველა ჩანაწერს. როგორ გავიგოთ, რამდენი მათგანია გამოქვეყნებული? ამისათვის ჩვენ ცოტა უნდა შევცვალოთ SQL მოთხოვნა.

4.0 ვერსიით დაწყებული, MySQL DBMS საკმარისი იყო მოსახერხებელი უნარიყველა გამომავალი რაოდენობის შენახვა ჩაიწერს ჩანაწერებს, სანამ ჩანაწერების რაოდენობა გამოყოფილია LIMIT-ით. მონაცემთა ბაზაში ძიებასთან მუშაობისას, ასევე ცხრილიდან არჩევისას დიდი რაოდენობითჩანაწერებში ასეთი ფუნქციონირება უბრალოდ აუცილებელია.

Სინტაქსი.

SELECT განცხადებაში, თქვენ უნდა მიუთითოთ SQL_CALC_FOUND_ROWS ვარიანტი საცობების სიის წინ. მე ჯერ აღვწერ SELECT კონსტრუქციის სინტაქსს.




აირჩიეთ

ამგვარად, ყოველ ჯერზე, როცა წერთ SELECT SQL_CALC_FOUND_ROWS, DBMS ინახავს სტრიქონების დიდ რაოდენობას, რომლებიც შეესაბამება მენტალურ მოთხოვნას და ინახავს ამ რიცხვს მეხსიერებაში. რა თქმა უნდა, აზრი შეიძლება მოითხოვოს SELECT SQL_CALC_FOUND_ROWS მხოლოდ მაშინ, როდესაც გამოიყენება ცვლადის ლიმიტი (LIMIT). შერჩევის დასრულებისთანავე, თქვენ უნდა შეიყვანოთ სხვა SELECT მოთხოვნა ჩანაწერების რაოდენობის წასაშლელად: SELECT FOUND_ROWS (); შედეგად, MySQL აბრუნებს ერთ მწკრივს ერთი ველით, რაც ინახავს რიგების რაოდენობას.

თავად შეკითხვის მაგალითი:

> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE ნომერი > 100 LIMIT 10;
> SELECT FOUND_ROWS();

პირველი აბრუნებს ცხრილის 10 სტრიქონს tbl_name, რისთვისაც ემატება რიცხვი > 100 SELECT ბრძანების მეორე ბრძანება აბრუნებს იმ მწკრივებს, რომლებსაც პირველი SELECT ბრძანება აბრუნებს, რადგან ის დაწერილია LIMIT გამოხატვის გარეშე. თუ იყენებთ ბრძანებას SELECT SQL_CALC_FOUND_ROWS, MySQL-მა ხელახლა უნდა მოაწყოს ყველა სტრიქონი შედეგების კომპლექტში, ეს მეთოდი ერთი და იგივეა, LIMIT-ის გარეშე, ამიტომ არ არის საჭირო შედეგის იძულება კლიენტისთვის.

შეკითხვის მაგალითი PHP-დან:

$result = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM table1 LIMIT 0, 10", $link);
ხოლო ($ row = mysql_fetch_assoc ($ შედეგი))
{
var_dump ($ row);
}

$result = mysql_query ("SELECT FOUND_ROWS()", $link);
$num_rows = mysql_result ($ შედეგი, 0);
ექო "$num_rows რიგები\n";

კოდის გაგების შედეგად, რომელსაც $link მიუთითებს DBMS კავშირის ეკრანზე, PHP აჩვენებს ცხრილის ცხრილიდან 10 სტრიქონს, შემდეგ კი მოთხოვნის შესაბამის მწკრივებს (LIMIT დაყენების გარეშე).

UNION SQL_CALC_FOUND_ROWS-ის შეკითხვებში შეგიძლიათ მოიქცეთ ორი გზით იმით, რომელიც LIMIT შეიძლება გამოჩნდეს ბევრგან. მწკრივის განლაგება შეიძლება განხორციელდეს ინდივიდუალური SELECT მოთხოვნებისთვის, ან ყველა შეკითხვისთვის აგრეგაციის შემდეგ.

SQL_CALC_FOUND_ROWS-ის მიზანი UNION-ისთვის არის ის, რომ ის პასუხისმგებელია რიგი მწკრივების როტაციაზე, რომლებიც შემოტრიალდება გლობალური LIMIT-ის გარეშე. SQL_CALC_FOUND_ROWS-ის მნიშვნელობა UNION-თან ერთად ნაჩვენებია ქვემოთ:

  • SQL_CALC_FOUND_ROWS საკვანძო სიტყვა შეიძლება გამოჩნდეს პირველ SELECT განცხადებაში.
  • FOUND_ROWS()-ის მნიშვნელობა უფრო ზუსტი იქნება UNION ALL-ის მენტალიტეტის გამო. თუ მიუთითებთ UNION ALL-ის გარეშე, იქნება რამდენიმე დუბლიკატი და FOUND_ROWS()-ის მნიშვნელობები იქნება მიახლოებითი.
  • ვინაიდან UNION-ში LIMIT არ არის, SQL_CALC_FOUND_ROWS იგნორირებულია და რიგი მწკრივები ბრუნავს საათობრივ ცხრილში, რომელიც შექმნილია UNION მწკრივში.

MySQL ცხრილში ჩანაწერების რაოდენობის დასადგენად, საჭიროა სწრაფად სპეციალური ფუნქცია COUNT().

COUNT() ფუნქცია აბრუნებს ცხრილში ჩანაწერების რაოდენობას, რომლებიც აკმაყოფილებენ მოცემულ კრიტერიუმს.

COUNT(expr) ფუნქცია ყოველთვის ითვალისწინებს სტრიქონებს, რომლებშიც expr-ის შედეგი NOT NULL.

ამ წესის პრობლემა ის არის, რომ COUNT() ფუნქცია არგუმენტად იყენებს ვარსკვლავს - COUNT(*) . ამ შემთხვევაში, ყველა მწკრივი განიხილება, მიუხედავად იმისა, არის თუ არა NULL ან NOT NULL.

მაგალითად, COUNT(*) ფუნქცია აბრუნებს ჩანაწერების მთლიან რაოდენობას ცხრილში:

აირჩიეთ COUNT(*) ცხრილის_სახელიდან

როგორ შეინახოთ ჩანაწერების დიდი რაოდენობა და გამოვაჩინოთ ისინი ეკრანზე

PHP+MySQL კოდის მაგალითი რიგების რაოდენობის განახლებისა და ჩვენებისთვის:

$res = mysql_query ("SELECT COUNT(*) FROM table_name") $row = mysql_fetch_row ($res); $სულ = $რიგი; // ჯამური ჩანაწერები ექო $ სულ; ?>

ეს მაგალითი ასახავს COUNT() ფუნქციის უმარტივეს ვერსიას. გარდა ამისა, ამ ფუნქციას შეიძლება დაემატოს სხვა პარამეტრები.

ცხრილის სვეტის პარამეტრად მითითების შემდეგ, COUNT(column_name) ფუნქცია აბრუნებს ამ სვეტში ჩანაწერების რაოდენობას NULL მნიშვნელობის შესაცვლელად. NULL მნიშვნელობების მქონე ჩანაწერები იგნორირებულია.

SELECT COUNT(column_name) FROM table_name

შეუძლებელია mysql_num_rows() ფუნქციის გამოყენება, ამიტომ ჩანაწერების გამოტოვებული რაოდენობის გასარკვევად, ყველა ჩანაწერის შესარჩევად უნდა შეიყვანოთ SELECT * FROM db, მაგრამ უმჯობესია გამოიყენოთ ფუნქცია yu count. .

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

COUNT()-ის სასარგებლო ფუნქციები აპლიკაციაში

ღერძი არის COUNT() ფუნქციის კიდევ ერთი კონდახი. შესაძლებელია არსებობდეს სუფრის ნაყინი ყინვების კატალოგით, რომელიც შეიცავს კატეგორიის იდენტიფიკატორს და ყინვის სახელს.

© 2022 androidas.ru - ყველაფერი Android-ის შესახებ