'SELECT SUM(regis_data.TYPE=1) AS t1,
SUM(regis_data.TYPE=2) AS t2,
SUM(regis_data.TYPE=3) AS t3,
SUM(regis_data.TYPE=4) AS t4
FROM `regis_data` คำอธิบายจากคำถามนี้ครับ
ตาราง type มันเก็บเลข 1-4 เป็นรหัสสาขา เราต้องการผลรวมของแต่ละสาขา เพื่อบอกว่าในสาขาที่ 1 มีคนสมัครแลวกี่คน ซึ่งโดยปกติแล้วจะใช้ WHERE 'course' เพื่อสร้างเงื่อนไข
แต่การทำด้วยวิธีการดังกล่าวนั้น จะต้อง query ข้อมูล 4 ครั้ง นั้นหมายถึง where type = 1, ... where type = 4
มีเทคนิคแบบไหนบ้างที่สามารถทำการ query เพียงครั้งเดียว แล้วได้ผลลัพท์ตามต้องการ คือบอกจำนวนว่า ใน type = 1 มีจำนวนกี่ row
ถ้ารู้ช่วยตอบด้วยครับ ขอบคุณมาก
ผลสรุปได้ว่า ผมต้องหาว่า ใน table นี้ มีเลข 1 กี่ตัว เลข 2 กี่ตัว 3 กี่ตัว และ 4 กี่ตัว คุณลองใช้ความคิดดูว่า ถ้าเ้ป็นคุณในตอนนี้จะใช้วิธีใดในการเขียนคำสั่ง SQL เพื่อดึงเอา record มาแสดงผล
ในแว๊บแรก ผมเชื่อว่าหลายคนอาจจะใช้แบบนี้ SELECT type FORM table WHERE type=1; ใช่มั้ยครับ แล้วต่อจากนั้น ท่า่นก็เอามา เข้่า mysql_num_rows() ใช่หรือเปล่า จากนั้นจะได้ $num ที่เป็นจำนวนแถวของ type = 1 (พยายามทำความเข้าใจนะครับ)
และถ้าต้องการหา type = 2 ท่านก็ต้องทำแบบเดิมอีก แต่เปลี่ยนเงื่อนไข เป็น WHERE type = 2 ถูกต้องมั้ยครับ
วิธีที่ง่ายและไวกว่าผมไปพบเจ้า SUM() เมื่อนานมาแล้ว มันใช้หาผลรวม ทีนี้ผมนึกสังหรณ์ใจว่า เอ๊ะ มันหาผลรวมได้แล้ว มันก็ต้องมีการสร้างเงื่อนไขได้ซิน่า
ในเมื่อมันเป็น function ผมเลยเขียนใส่เข้าไปแบบนี้ครับ SUM(type=2) ผลลัำพท์ืที่ได้ก็คือ SUM(type=2) = 1
แต่ในที่นี้ผมต้องการระบุชือให้กับเจ้า field นี้ใหม่ เป็น T2 ก็ใส่เพิ่มไปว่า SUM(type=2) AS T2
ผมต้องการหา ผลรวมของ type ทั้ง 4 ดังนั้น ผมจึได้เขียนออกมาตามตัวอย่างข้างต้น
ใครมีข้อสงสัยตรงไหนลองสอบถามได้ครับ ลองเอาไปประยุกค์ใ้ช้กันดู
ข้อดีของการเขียน SQL ข้างต้น1. สั้นและกระชับ
2. ทำงานได้รวดเร็ว
3. ใช้ function ของ SQL ได้คุ้มค่า
4. ฝึกทักษาการเขียน ภาษา SQL
5. ลดการทำงานของ Server เมื่อมีการ query น้อย ก็ย่อมทำงานน้อยลงไปด้วย
6. แก้ไขได้ง่าย อ่านง่ายดูง่าย