สอบถามการนับจำนวน และแยกประเภทโดยใช้คำสั่ง sql select และ คิวรี่ครั้งเดียวครับ.
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามการนับจำนวน และแยกประเภทโดยใช้คำสั่ง sql select และ คิวรี่ครั้งเดียวครับ.
สอบถามการนับจำนวน และแยกประเภทโดยใช้คำสั่ง sql select และ คิวรี่ครั้งเดียวครับ.
จากตาราง student ด้านบน
สมมุติว่าเราจะทำหน้าสรุปรายงานดังนี้
- ระบุจังหวัด กรุงเทพ = 4 คน, สมุทรปราการ = 2 คน, อื่น ๆ = 2 (ซึ่งหมายถึง นครปฐม = 1และปทุมธานี = 1 คนแต่ให้นับรวมกันเป็นอื่น ๆ )
- ระบุระดับชั้น อนุบาล = 3 คน, ประถมศึกษา = 5 คน
- ระบุสี สีแดง = 2 คน, สีชมพู = 4 คน, สีฟ้า = 2 คน
- ระบุจำนวน นักเรียนทั้งหมด = 8 คน
แบบว่าให้คิวรี่และ mysql_fetch_array ครั้งเดียวแล้วสั่ง echo ได้เลย.
ที่คิดออกตอนนี้คือ
select * from student where province = 'กรุงเทพ' แล้วก็ใช้ num row นับแถวเอา
ส่วนข้อมูลอื่น ๆ และฟิลด์อื่น ๆ ก็ทำเช่นกัน
แต่มาคิดดููแล้วมันน่าจะไม่ใช่วิธีที่ถูกต้อง
จึงได้สอบถามมาครับ.

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
ความคิดเห็นที่
1
ถ้าต้องการข้อมูลสุดท้าย จากการ query คำสั่งเดียว เราจำเป็นต้องจัดรูปแบบข้อมูล
ที่ต้องการ หรือโครงสร้างผลลัพธ์ที่ต้องการในรูปแบบของตารางก่อน
อย่างในที่นี้ เรามีข้อมูลอยู่ 4 แบบ
- จังหวัด
- ระดับชั้น
- สี
- จำนวน
ส่วนนี้เรากำหนดฟิลด์เป็น section และให้ค่าเป็น 1,2,3 และ 4 ตามลำดับ
ต่อไปส่วนของ ชื่อข้อมูลที่เราจะนับ เราให้ฟิลด์เป็น title ค่าก็จะเป็น ชื่อจังหวัด ชื่อระดับชั้น
ชื่อสี และชื่อจำนวนทั้งหมด
และส่วนสุดท้าย จะเป็นจำนวนของข้อมูลแยกตามชื่อข้อมูล
โครงสร้างตาราง ตัวอย่าง ก็จะเได้เป็น
section title num
1 กรุงเพท 4
1 สมุทรปราการ 2
3 แดง 2
ดังนั้นรูปแบบคำสั่งที่เราต้องการคือ
1 2 3 4 5 | SELECT section , title, num FROM tbl_demo3 |
แต่ฟิลด์ข้างต้นไม่มีในตาราง ดังนั้นเราจึงใช้เป็นชื่อเรียกแทน ก็จะเป็น
1 2 3 4 5 | SELECT xxx as section , xxx as title, xxx as num FROM tbl_demo3 |
ต่อไปให้เราไล่ข้อมูลแต่ละชุดที่เราอยากได้ กรณีแรก จังหวัด เนื่องจากเป็นการนับจำนวน
แบบบจัดกลุ่มอีกที จึงใช้ GROUP BY ฟิลด์ที่จะนับ
1 2 3 4 5 6 | SELECT 1 as section , province as title, COUNT (id) as num FROM tbl_demo3 GROUP BY province |
จะเห็นว่ากรณีแรกเราฟิกค่าให้กับฟิลด์ section เป็น 1 และข้อมูล title เราใช้ค่าจากฟิลด์ province
ทำลักษณะเดียวกับ ระดับชั้นและสี จะได้เป็น
1 2 3 4 5 6 | SELECT 2 as section , class as title, COUNT (id) as num FROM tbl_demo3 GROUP BY class |
1 2 3 4 5 6 | SELECT 3 as section , color as title, COUNT (id) as num FROM tbl_demo3 GROUP BY color |
ส่วนสุดท้าย คือการนับจำนวนทั้งหมด จะเห็นว่ารูปแบบ จะแตกต่างจาก 3 รูปแบบแรก
เพราะจะไม่มีการจัดกลุ่ม
1 2 3 4 5 | SELECT 4 as section , xxx as title, COUNT (id) as num FROM tbl_demo3 |
ส่วนของฟิลด์ที่จะใช้เป็น title ไม่มี ดังนั้นให้เราฟิกค่าเป็น string แทนดังนี้
1 2 3 4 5 | SELECT 4 as section , 'total' as title, COUNT (id) as num FROM tbl_demo3 |
จากรูปแบบการ query ทั้ง 4 ข้างต้น เราจะได้ข้อมูลตารางใหม่ 4 ตาราง ที่มีชื่อฟิลด์เหมือนกัน
ดังนั้น เราสามารถนำคำสั่งทั้งหมด มาทำการ UNION แล้วเรียกใช้ผ่านการคิวรี่ครั้งเดียวได้ ด้วย
รูปแบบดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | SELECT 1 as section , province as title, COUNT (id) as num FROM tbl_demo3 GROUP BY province UNION SELECT 2 as section , class as title, COUNT (id) as num FROM tbl_demo3 GROUP BY class UNION SELECT 3 as section , color as title, COUNT (id) as num FROM tbl_demo3 GROUP BY color UNION SELECT 4 as section , 'total' as title, COUNT (id) as num FROM tbl_demo3 |
ผลลัพธ์ที่ได้
เราสามารถใช้ php จัดการกับข้อมูลต่อไป โดยสามารถกำหนดเป็น array 2 มิติ เพื่อแยกข้อมูล
เป็น section แล้วนำไปแสดง

ความคิดเห็นที่
2
ขอบคุณครับ

ความคิดเห็นที่
3
อธิบายตรงนี้เพิ่มให้หน่อยครับ กำลังศึกษาและนำมา code ครับ มีตัวอย่างให้ดูไหมครับ

ขอบคุณทุกการสนับสนุน
![]()