แถวของ mysql Vibirka ที่pіdrahunok ryadkіvในหนึ่งรายการ - SQL_CALC_FOUND_ROWS Dekilka วิธีการที่ถูกต้อง
รหัสผู้แต่ง:หนึ่งฉันรู้stverzhuє, scho Dіd Frost іsnuє ที่ไวน์ใหม่หลังจากที่เชื่ออย่างนั้นเหมือนลูกชายคนเล็ก แม่น้ำสายใหม่ให้ช็อกโกแลต zukerki 10 กก. ตอนนี้ชะตากรรมที่จะเกิดขึ้นกับซานตาคลอสขอตราประทับสำหรับสมาชิกทุกคนในครอบครัว! เพื่อประโยชน์ในการเขียนโปรแกรมเว็บ คุณสามารถปลอดภัยจากความล้มเหลวดังกล่าวและกำหนดจำนวนแถวใน MySQL เป็นเวลานาน
ต้องการทราบทักษะ?
ไม่ว่าตารางจะพับจากstovptsіvและแถวหรือไม่ จำเป็นต้องประหยัดเงินที่ฐานข้อมูลขึ้นอยู่กับจำนวนแถวที่เหลืออยู่ที่ตารางสกิน
คล้ายกับว่าเนื่องจากจำนวนรูในฟันของบุคคลที่จะโกหกเนื่องจากภาระหน้าที่ของสึเคโระก่อน แม่นยำยิ่งขึ้นในรูปแบบของสวนมอลต์ราวกับว่าพวกเขา "มอบ" ลูกของคุณให้กับ Novy Rik
นึกขึ้นได้ว่าจำนวนแถวที่ ฐานข้อมูล MySQLคุณจะไม่ได้รับตราประทับจากบริษัทของคุณ แต่เช่นเดียวกัน การรู้ว่าพารามิเตอร์นี้จำเป็นเมื่อเพิ่มประสิทธิภาพงานของไซต์ของคุณ เพื่อเปิดใช้สคริปต์บางรายการ และอื่นๆ
อย่างง่ายดาย!
สำหรับการประมวลผลใน MySQL จำนวนแถวไม่จำเป็นต้อง "เข้าใจได้" ในคลังข้อมูล SQL เพื่อให้เสร็จสิ้นเพียงแค่ vodkriti ที่เชลล์โปรแกรมจะต้องใช้ตารางที่ดูที่ id ของแถวที่เหลือ คีย์ที่สำคัญที่สุดมักจะได้รับชัยชนะในฐานะคีย์ที่ไม่ซ้ำ และค่าของคีย์จะถูกสร้างขึ้นโดยอัตโนมัติ (การเพิ่มอัตโนมัติ) โดยการเพิ่มหนึ่ง (+1) ที่ด้านหน้า
Shchob เพื่อนำ "สัจพจน์" ของ tsyu, vіdkriєmoในตาราง phpMyAdmin ไม่ว่าฐานข้อมูลจะเป็นอะไร ตัวอย่างเช่นตารางสัตว์ ดังที่คุณเห็นในภาพหน้าจอ ค่ารหัสจะเรียงลำดับจาก 1 ถึง ... มาดูกัน! แล้วแมวจาก “เลขประจำตัว” 4 ล่ะอยู่ที่ไหน? เรียกง่ายๆ ว่า “หมา” เลข 5 และ 6 zlyakavsya
ในฐานข้อมูล MySQL นี้ จำนวนแถวในตารางสามารถถูกจิ้ม "ด้วยนิ้ว" ได้ง่ายๆ อนิจจา robiti แค่ไหนเพราะตารางไม่มี 7 แถว แต่มี sprats นับร้อย? ตัวอย่างเช่นเช่น qiy
และมีเพียงหนึ่งในแปดด้านของการเลือก อันที่จริง จำนวนเร็กคอร์ดสามารถนับเป็นร้อยหรือเป็นพันก็ได้ จนถึงตอนนี้ไม่มีรหัสดังนั้นไวน์จึงไม่ใช่ obov'yazkovym เป็นไปได้ที่จะอยู่ในโครงสร้างของฐานข้อมูลทั้งหมด เศษของความหมายของแถวทั้งหมดในความสัมพันธ์ซึ่งกันและกันระหว่างกัน ปรากฎว่าคำอธิบายเป็นวิธีที่ดีที่สุดในการมีเพศสัมพันธ์แถวของ MySQL ที่ไม่จำเป็น
Dekilka วิธีที่ถูกต้อง
ดูเหมือนว่าวิธีแรกจะ "เป็นก้อน" ดังนั้นเราจึงสามารถดูวิธีที่มีประสิทธิภาพและ "ง่าย" น้อยกว่าได้สองสามวิธี:
ฟังก์ชัน COUNT() - หมุนจำนวนแถว Є vbudovanoyu ฟังก์ชัน SQL ถึงกระนั้น เราทราบจำนวนระเบียนในตารางที่ยอดเยี่ยมจากฐานข้อมูล ซึ่งภาพหน้าจอแสดงไว้ด้านบน ต้องการรหัส:
เลือก COUNT(*) จาก `country`
SELECT COUNT (* ) จาก `country` |
มี 239 รายการในตารางประเทศ! ฉันรู้ว่าสำหรับเจ้าหนูตัวน้อยนี้ คุณไม่สามารถเอานิ้วแตะมือหรือเท้าของคุณได้ (ดังนั้น คุณจะไม่ชนะกลอุบายของคนอื่นหรือสิ่งมีชีวิตอื่นๆ) เช่นเดียวกับ bachite วิธีนี้ของ MySQL pіdrakhunku kіlkostіryadkіv pratsyuєแม่นยำยิ่งขึ้นและบ่อยขึ้นvikoristovuєtsya
ฟังก์ชั่น Ale tsya vmієไม่น้อย tse! ตัวอย่างเช่นด้วยความช่วยเหลือคุณสามารถค้นหา skilki จาก "ตัวแทน" จาก DB ของประเทศถูกซื้อซ้ำจากยุโรป:
และจำนวนครั้งที่เดาพื้นที่ผิวในตาราง คำขอตัวอย่าง:
เลือก 'ชื่อ' นับ (*) จาก 'ประเทศ' จัดกลุ่มตาม 'ชื่อ'
เลือก ` ชื่อ ` , นับ ( * ) จาก ` ประเทศ ` จัดกลุ่มตาม ` ชื่อ ` |
สำหรับความช่วยเหลือจากคำขอนี้ เราได้ระบุแถวของ MySQL จำนวนหนึ่งซึ่งมีการสร้างสกินของประเทศ จากผลชัยชนะเห็นได้ชัดเจนว่าเกิดขึ้นเพียงครั้งเดียว
น้อยไม่ลืม! เนื่องจากคุณยังไม่มีฐานโลก เพราะทุกวันนี้มันใช้งานได้จริงแล้ว คุณก็สามารถใช้ประโยชน์จากความช่วยเหลือจากเว็บไซต์ทางการของร้านค้าปลีกได้ DBMS MySQL. ถ้าไฟล์เก็บถาวรถูกโหลดมาด้วย จำเป็นต้องยกเลิกการเก็บถาวรแล้วนำเข้าเซิร์ฟเวอร์ฐานข้อมูล ใน phpMyAdmin คุณสามารถทำได้ผ่านรายการเมนูหลัก นำเข้า
รายงานเกี่ยวกับขั้นตอนนี้ ฉันได้อธิบายไว้ในเอกสารฉบับใดฉบับหนึ่งก่อนหน้านี้
ฟังก์ชัน MAX() - ในบางกรณี ยังอนุญาตให้ MySQL รู้จักจำนวนแถวในตาราง ทำไมต้องอินโคลี่? ฉันจะอธิบายตอนนี้ จำวิธีแรกที่ไอ้เหี้ยนั่นที่เรามองดูซัง ในกรณีของuvazі, scho ค่าที่สุดของค่า id มากกว่าจำนวนเรคคอร์ด Zastosuvannya tsієї funktsії є svogo ชนิด "อัตโนมัติ" วิธี MAX() หมุนค่าสูงสุดของคอลัมน์ที่ระบุ (id) ในการทดสอบฟังก์ชัน เราต้องใช้ตารางเมืองและป้อนฐานข้อมูลฐานโลก ต้องการรหัส:
เลือก MAX(`ID`) จาก` city`
เลือก MAX ( `ID`) จาก `city` |
เป็นผลให้เรานำค่าของผู้นอนในแถวที่เหลือออกไป ออกจากระบบว่า MySQL ได้ทำลายจำนวนแถว
หากจำเป็น คุณสามารถบันทึกส่วนที่เหลืออีกครั้ง:
SELECT MAX('ID'), 'Name', 'CountryCode', 'District', 'Population' จาก 'city'
เลือก MAX ( ' ID ' ), ' Name ' , ' CountryCode ' , ' District ' , ' Population ' FROM ' city ' |
เพื่อเป็นการตอบแทน สำหรับตัวเลือกก่อนการเรียกใช้ฟังก์ชัน ให้แทนที่ "*" กับฉัน ฉันจะเปลี่ยนชื่อของคอลัมน์ทั้งหมด Tse ไวยากรณ์พิเศษเมื่อฟังก์ชัน zastosuvanni vbudovanyh MySQL
การแต่งตั้งจำนวนระเบียนใน PHP
บ่อยครั้งที่รหัสไซต์ PHP MySQLต้องใช้จำนวนแถวเพื่อส่งผ่านค่าเป็นพารามิเตอร์อินพุตสำหรับการประมวลผลต่อไป Tse สามารถเป็น robiti เพื่อขอความช่วยเหลือจากโค้ดที่น่ารังเกียจ:
query("SELECT * FROM `country`")) ( printf("ตารางมี %d แถว\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 นั้นเพียงพอแล้ว เป็นไปได้ปริมาณของบันทึกvidpovіdnyh pіd ทั้งหมดหากจำนวนบันทึกถูก จำกัด โดย LIMIT เมื่อทำงานกับการค้นหาในฐานข้อมูลเช่นเดียวกับเมื่อสั่นจากตาราง kіlkistyu .ที่ดีการบันทึกฟังก์ชันดังกล่าวเป็นสิ่งที่จำเป็น
ไวยากรณ์ ในแบบสอบถาม SELECT ต้องระบุตัวเลือก SQL_CALC_FOUND_ROWS ก่อนรายการคอลัมน์ แกน cob จะอธิบายไวยากรณ์ของโครงสร้าง SELECT
เลือก
select_expr, … …
ด้วยวิธีนี้ SELECT SQL_CALC_FOUND_ROWS DBMS จำเป็นต้องรักษาจำนวนแถวให้เท่ากัน เนื่องจากจะพอดีกับสมอง และบันทึกตัวเลขไว้ในหน่วยความจำ เห็นได้ชัดว่า SELECT SQL_CALC_FOUND_ROWS สามารถขอได้ที่ LIMIT เท่านั้น เมื่อเลือกจำนวนรายการแล้ว จำเป็นต้องมีคำขอ SELECT อีกหนึ่งรายการ: SELECT FOUND_ROWS (); เป็นผลให้ MySQL หมุนหนึ่งแถวด้วยหนึ่งฟิลด์ ซึ่งใช้จำนวนแถว
ตัวอย่างของคำขอเอง:
> เลือก SQL_CALC_FOUND_ROWS * จาก tbl_name โดยที่หมายเลข > 100 LIMIT 10;
> เลือก FOUND_ROWS();
แถวแรกถูกหมุน (มีชีวิต) 10 แถวในตาราง tbl_name ซึ่งใช้ตัวเลข > 100 หากคุณต้องการเปลี่ยนคำสั่ง SELECT SQL_CALC_FOUND_ROWS MySQL มีความผิดในการแสดงผลแถวทั้งหมดในชุดผลลัพธ์ซ้ำ วิธีนี้จะเหมือนกันหมดเร็วขึ้น ลดลงโดยไม่มี LIMIT ดังนั้นจึงไม่จำเป็นต้องบังคับผลลัพธ์ไปยังไคลเอ็นต์ .
ตัวอย่างคำขอจาก PHP:
$result = mysql_query("เลือก SQL_CALC_FOUND_ROWS * จาก table1 LIMIT 0, 10", $link);
ในขณะที่ ($row = mysql_fetch_assoc($result))
{
var_dump($แถว);
}$result = mysql_query("SELECT FOUND_ROWS()", $ลิงก์);
$num_rows = mysql_result($ผล 0);
echo "$num_rows แถว\n";
ด้วยเหตุนี้ ให้ค้นหาว่า $link แสดงบนหน้าจอเข้าสู่ระบบ DBMS อย่างไร PHP จะแสดง 10 แถวจาก table1 จากนั้นจึงระบุจำนวนแถวที่ต้องป้อน (โดยไม่มีการปรับ LIMIT)
สำหรับคำขอ UNION SQL_CALC_FOUND_ROWS สามารถทำงานสองวิธีผ่านทางที่ LIMIT สามารถปรากฏในตำแหน่งต่างๆ การวิเคราะห์แถวสามารถทำได้สำหรับ SELECT-zapitіv แต่ละรายการ หรือสำหรับคำขอทั้งหมดหลังจากข้อต่อ
เป้าหมาย SQL_CALC_FOUND_ROWS สำหรับ UNION หมายความว่าไวน์มีหน้าที่ในการหมุนจำนวนแถวที่จะหมุนโดยไม่มี LIMIT ทั่วโลก ล้างจุดบกพร่องของ SQL_CALC_FOUND_ROWS ด้วยยูเนี่ยนโฮเวอร์ด้านล่าง:
- คีย์เวิร์ด SQL_CALC_FOUND_ROWS อาจปรากฏในคำสั่ง SELECT แรก
- ค่าของ FOUND_ROWS() จะแม่นยำกว่า UNION ALL หากระบุ UNION โดยไม่มี ALL จะมีรายการซ้ำกันหลายรายการ และค่า FOUND_ROWS() จะเป็นค่าโดยประมาณเท่านั้น
- เนื่องจากไม่มี LIMIT ใน UNION ดังนั้น SQL_CALC_FOUND_ROWS จะถูกละเว้น และจำนวนแถวในตารางนาฬิกาจะถูกหมุน เนื่องจากถูกสร้างขึ้นสำหรับ UNION
ในการกำหนดจำนวนเรคคอร์ดในตาราง MySQL จำเป็นต้องเร่งความเร็ว ฟังก์ชั่นพิเศษนับ().
ฟังก์ชัน COUNT() จะหมุนจำนวนเรคคอร์ดในตารางที่ตรงกับเกณฑ์ที่ระบุ
ฟังก์ชัน COUNT(expr) จะพิจารณาเฉพาะแถวเท่านั้น ซึ่งผลลัพธ์ของ expr ไม่ใช่ NULL
ตำหนิตามกฎนี้ - ตัวเลือกของฟังก์ชัน COUNT() จากดาวเป็นอาร์กิวเมนต์ - COUNT(*) ในกรณีนี้ แถวทั้งหมดจะถูกนำมาพิจารณา ไม่ว่า NULL จะมีกลิ่นเหม็นหรือไม่ก็ตาม NOT NULL
ตัวอย่างเช่น ฟังก์ชัน COUNT(*) จะหมุนจำนวนระเบียนทั้งหมดในตาราง:
SELECT COUNT(*) จาก table_name
วิธีทำให้เสียจำนวนเร็กคอร์ดและนำมาที่หน้าจอ
ตัวอย่างของโค้ด PHP+MySQL สำหรับนักเล่นพิเรนทร์และการมองเห็นแถวจำนวนมาก:
$res = mysql_query("SELECT COUNT(*) จาก table_name") $row = mysql_fetch_row($res); $total = $แถว; // บันทึกทั้งหมด echo $ รวม; ?>
ตัวอย่างนี้แสดงให้เห็นเวอร์ชันที่ง่ายที่สุดของฟังก์ชัน COUNT() ที่ได้รับชัยชนะ และสำหรับความช่วยเหลือจากฟังก์ชันนี้ คุณสามารถเอาชนะงานอื่นๆ ได้
กำหนดให้คอลัมน์แรกของตารางเป็นพารามิเตอร์ ฟังก์ชัน COUNT(column_name) จะหมุนจำนวนระเบียนในคอลัมน์นั้นเพื่อหลีกเลี่ยง NULL ระเบียนที่มีค่า NULL จะถูกละเว้น
SELECT COUNT(column_name) จาก table_name
เป็นไปไม่ได้ที่จะชนะฟังก์ชัน mysql_num_rows() ดังนั้นเพื่อให้ทราบจำนวนเร็กคอร์ดทั้งหมด คุณต้องชนะ SELECT * FROM db เพื่อที่จะชนะเร็กคอร์ดทั้งหมด แต่ไม่จำเป็น จะดีกว่าที่จะชนะ ฟังก์ชันการนับ
$result = mysql_query("SELECT COUNT(*) เป็นบันทึกจาก db");
การใช้ฟังก์ชัน COUNT() ในแอปพลิเคชัน
Axes อีกหนึ่งแอปพลิเคชันของฟังก์ชัน COUNT() เป็นไปได้ว่าตาราง ice_cream ที่มีแค็ตตาล็อกช่องแช่แข็งจะมีตัวระบุหมวดหมู่และชื่อช่องแช่แข็ง