15. 309
3 การเลือกบางส่วนของข้อมูลเพื่อแสดงในรายการ
การสร้างรายการข้อมูลที่นำข้อมูลมาจากตารางฐานข้อมูล อาจมีการใช้ตารางเดียวหรือหลาย
ตาราง ซึ่งในฐานข้อมูลจะเก็บข้อมูลอยู่เป็นจำนวนมากทั้ง column ต่างๆ ที่สนับสนุนการใช้งานร่วมกัน
ในหลายมุมมองและจำนวนข้อมูลใน row ที่อาจมีข้อมูลสะสมอยู่มากมาย การนำข้อมูลออกมาแสดงใน
แต่ละหน้าจอจะเลือกเอาข้อมูลที่เหมาะสมกับสารสนเทศที่ต้องการใช้ จึงต้องมีการเลือกใช้ข้อมูลเพียง
บางส่วนซึ่งจะกล่าวถึงการใช้ expression ในคำสั่ง SELECT ในกรณีต่างๆ
3 1) การเลือกคอลัมน์
ข้อมูลที่เก็บใน table ของ database มักประกอบด้วย column/field มากมายที่เป็นราย
ละเอียดของข้อมูลนั้น การนำข้อมูลมาแสดงในรายการหัวข้อทั้งด้าน row และ column ควรเลือกให้
เหมาะสมกับพื้นที่บนจอภาพ ในด้าน column ควรเลือกเฉพาะ column หรือ field ที่เป็นประโยชน์
และเพียงพอต่อการมองเห็นแล้วสามารถแยกแยะหรือตัดสินใจหรือตีความได้ว่าข้อมูลนั้นคือรายการ
อะไร เพื่อตัดสินใจเลือกดำเนินการต่อไปกับรายการนั้นหรือเลือกดำเนินการอื่นๆ
อาจใช้ column ที่เป็นข้อความ ข้อมูลตัวเลข หรือภาพ image ตามความเหมาะสมกับประเภท
ของสารสนเทศ เช่น หากเป็นรายการหัวข้อข่าวอาจจะใช้เฉพาะข้อความหัวข้อข่าว หากเป็นรายการ
สินค้าอาจใช้ภาพของสินค้าประกอบร่วมกับชื่อรายการ หากเป็นรายการซื้อสินค้าอาจมีวันที่ ประกอบ
กับข้อมูลส่วนอื่นๆ หรือหากเป็น photo/image gallery ควรจะใช้ภาพ thumb nail ฯลฯ เป็นต้น
การแสดงรายการอาจใช้ข้อมูลจาก table เดียวหรือหลาย table ประกอบกันเพื่อให้แสดง
ความหมายได้อย่างสมบูรณ์
ในการแสดงผลจะต้องกำหนดลำดับของการแสดง field ที่เหมาะสมต่อการใช้งานของผู้ใช้โดย
ไม่ต้องเรียงตามลำดับการเก็บใน table และอาจจะมีเครื่องหมาย คำหรือข้อความประกอบแทรกเข้ามา
เพื่อให้ดูแล้วเข้าใจสื่อความได้ง่าย
ผลจากการเลือก column ที่จะนำมาแสดงหรือใช้ในการประมวลผล จะถูกนำมากำหนดชื่อ
field หรือ column ของ result set ที่ต้องการ ในคำสั่ง SQL ซึ่งไม่ควรจะใช้เครื่องหมาย * แทนการ
เลือกทุกๆ field หรือ column ในทุกกรณี เนื่องจากการระบุใช้ใช้เครื่องหมาย * นั้นจะทำให้การใช้
พื้นที่หน่วยความจำของแม่ข่าย web ในการเก็บผลลัพธ์ result set ต้องใช้พื้นที่มากขึ้นโดยไม่จำเป็น
และยังเกิดการส่งผ่านข้อมูลระหว่าง database server ไปยัง web server เป็นปริมาณมากด้วย ซึ่ง
หากเป็นการใช้แม่ข่ายแยกจากกันจะทำให้การทำงานช้ามาก โดยเฉพาะหากใน table นั้นมี field
ประเภท TEXT, LONGTEXT, BLOB, LONG BLOB ที่เก็บข้อมูลขนาดใหญ่มากๆ จึงควรระบุในคำสั่ง
SQL เฉพาะ column ที่จะนำมาใช้ในการแสดงหรือประมวลผลเท่านั้น
การระบุ column ที่ต้องการจะระบุเป็น column ที่มาจาก table เดียวหรือหลาย table หรือ
อาจจะสร้าง column จากการประมวลผล เช่น จากการนับจำนวน row ของกลุ่มต่างๆ ตามเงื่อนไข
การหาค่าผลรวม (summation) หรือนำหลาย column จาก table สร้างเป็นผลลัพธ์ใน column
เดียวกัน หรือมีการคำนวณคณิตศาสตร์ เป็นต้น การดำเนินการต่างๆ ตามที่กล่าวมาเหล่านี้สามารถ
กระทำได้โดยใช้ select expression .ในคำสั่ง SELECT ที่ได้กล่าวถึงในแล้วบทที่ 7
ตัวอย่างของการสร้าง column ใหม่จากการใช้ expression เช่น
SELECT stID, cancat(firstName, " ", lastName) AS stName from graduated
ตัวอย่างนี้เลือกเฉพาะ column stID, firstName และ lastName โดยนำ column
firstName และ lastName มาต่อกันสร้างเป็น column ใหม่ชื่อ stName
SELECT deptid,MAX(gpa) AS maxGPA FROM graduated GROUP BY deptid ;
เป็นคำสั่งเลือกข้อมูล gpa ที่สูงสุดของแต่ละ department ขึ้นมาพร้อมกับ department id.
โดยใช้ function MAX( ) ที่เป็นฟังก์ชันทางสถิติที่สามารถแบ่งข้อมูลที่จะหาค่าสูงสุดโดยแบ่งข้อมูล
เป็นกลุ่มได้
SELECT deptName, MAX(gpa) AS maxGPA FROM graduated, department WHERE
graduated.deptid=department.deptid GROUP BY deptid ;
ตัวอย่างนี้ทำการเชื่อม 2 ตารางได้แก่ graduated และ department โดยใช้ deptid ของ
graduated table เป็น column สำหรับเชื่อม (foreign key) ไปยัง column deptid ที่เป็น primary
key ของ department table และนำ column deptName จาก department table มาใช้เป็น
ผลลัพธ์ร่วมกับ maxGPA ที่มาจากการหาค่า gpa สูงสุดของข้อมูลแต่ละกลุ่ม
3 2) การเลือก row
การนำข้อมูลมาใช้แสดงหรือประมวลผลในบางกรณีจะนำข้อมูลทั้งหมดมาใช้ หากข้อมูลนั้นมี
จำนวน row ไม่มากนักหรือเป็นผลลัพธ์ที่ควรจะเห็นทุกรายการในหน้าเดียวกัน แต่บ่อยครั้งที่เราจะต้อง
WEB PROGRAMMING
Using PHP. and MySQL.
16. 310
คัดเลือกข้อมูลบาง row ที่จะนำมาใช้แสดงตามเงื่อนไขของผลลัพธ์ที่ต้องการ เช่น การแสดงข้อมูลของ
ลูกค้าเฉพาะคน การแสดงข้อมูลที่อยู่ในช่วงเวลาที่กำหนด การแสดงข้อมูลเฉพาะรายการที่มีสถานะ
ตามที่เลือก หรือมีค่าใน field ตามที่ต้องการ นอกจากนี้ยังรวมถึงการจำกัดจำนวน row ที่ตรงกับ
เงื่อนไข เช่น การแสดงรายการวิดีโอที่มีการยืมสูงสุด 10 อันดับแรก การแสดงรายการข่าวล่าสุด 5
หัวข้อข่าว การแบ่งแสดงผลข้อมูลที่มีจำนวน row มากๆ เป็น page ที่มีขนาดจำนวน row ที่เหมาะสม
เช่น 10-20 row ฯลฯ เป็นต้น
การเลือก row ของข้อมูลจาก database table ที่ต้องการควรจะกำหนดเงื่อนไขของการ
เลือกข้อมูลลงในคำสั่ง SQL ใน WHERE clause เพื่อให้เป็นหน้าที่ของ database engine ซึ่งจะทำงาน
ได้มีประสิทธิภาพมากกว่าการขอข้อมูลทุก row โดยไม่กำหนดเงื่อนไข WHERE แล้วเขียน server
side script เพื่อคัดเลือกข้อมูล เนื่องจากจะทำให้มีปริมาณการส่งข้อมูลจาก database engine ไปยัง
web server เป็นจำนวนมาก ซึ่งมีผลกระทบต่อปริมาณ network traffic และใน web server ก็ยัง
ต้องใช้พื้นที่มากมายในการเก็บข้อมูลที่เป็นผลลัพธ์หากดึงมาทุกรายการ
นอกจากการเลือก row ตามที่ต้องการแล้วสำหรับการแสดงผล การจัดลำดับก่อนหลังของ
ข้อมูลผลลัพธ์ ก็มีความสำคัญกับผลลัพธ์บางประเภทที่ต้องการ เช่น แสดงสินค้าตามลำดับราคา แสดง
รายการข่าวตามลำดับความใหม่ (ลำดับการป้อนเข้า) แสดงรายชื่อนักเรียนตามลำดับคะแนนผลการ
ศึกษา เป็นต้น ซึ่งการแสดงข้อมูลตามลำดับนี้ สามารถใช้ ORDER BY clause ในคำสั่ง SELECT โดย
ให้เรียงจากค่าน้อยไปมาก (ascending) หรือมากไปน้อย (descending) ซึ่งโดยปกติการใช้ ORDER
BY จะเรียงลำดับแบบ ascending หากจะให้เรียงแบบ descending ต้องระบุ DESC
ตัวอย่างการใช้ ORDER เช่น SELECT … ORDER BY price เป็นการเรียงโดยใช้ column
price เรียงจากน้อยไปมาก หรือ SELECT … ORDER BY entryDate DESC เรียงลำดับจาก column
entryDate โดยเรียงจากมากไปน้อย (วันที่ล่าสุดไปหาวันที่เก่ากว่า) เป็นต้น
สำหรับการจำกัดจำนวนผลลัพธ์ที่ต้องการก็สามารถใช้ LIMIT clause ในคำสั่ง SELECT ของ
SQL. ช่วย ซึ่งมีรูปแบบ SELECT … LIMIT num หรือ LIMIT start,num โดยที่ num คือจำนวน row
ที่ต้องการ ส่วน start คือ ลำดับที่ของ row แรกตามข้อมูลที่ตรงตามเงื่อนไขที่จะนำออกมาเป็นผลลัพธ์
เช่น หากคำสั่ง SELECT ได้ข้อมูลที่ตรงกับเงื่อนไขจำนวน 300 row จากจำนวนข้อมูลทั้งหมด 20000
row การกำหนด LIMIT 100,20 ในคำสั่ง SELECT จะดึงเอาเฉพาะข้อมูลลำดับที่ 101-120 ของ
ข้อมูลใน 300 row ที่ตรงเงื่อนไขออกมาเป็นผลลัพธ์ (ข้อมูลรายการแรกคือลำดับที่ 0)
ตัวอย่างของการใช้ WHERE, LIMIT และ ORDER BY clause เช่น
• การเลือกแสดงชื่อนักศึกษาที่มีผลการศึกษาตั้งแต่ 3.00 ขึ้นไป
SELECT stID, cancat(firstName,lastName) AS stName from graduated WHERE
gpa >= 3.00;
• ตัวอย่างการแสดงรายการข่าวล่าสุด 5 รายการ
SELECT msgID,headline,entryTime FROM news ORDER BY entryTime DESC
LIMIT 5 ;
ตัวอย่างการแสดงรายชื่อนักศึกษาที่มีผลการเรียนดีที่สุด จำนวน 10 คนแรก และต้องมีผลการ
เรียนเกินกว่า 3.00
SELECT stID,concat(firstName,lastName) AS stName FROM graduated WHERE
gpa > 3.00 ORDER BY gpa DESC LIMIT 10 ;
การเลือกเฉพาะ row ที่มีข้อมูลตรงกับใน list สามารถใช้ operator IN เช่นหากต้องการ
เลือกเฉพาะรายการภาพยนตร์ที่มี rate เป็น ALL หรือ PG-13 เท่านั้น (รายการใน list ของ IN
สามารถกำหนดได้หลายรายการคั่นด้วย comma , )
SELECT title,rate,movID FROM movie WHERE rate IN ("ALL","PG-13") ;
การเลือกข้อมูลที่อยู่ในช่วง (ข้อมูลตัวเลข ข้อมูลวันที่) เช่น เลือกรายการข่าวสารที่จะประกาศ
วันนี้ (โดยมี column ที่กำหนดว่าจะเริ่มประกาศเมื่อใด pubDate และประกาศถึงเมื่อใด endDate)
หรือ รายการสินค้าที่มีราคาอยู่ในช่วง 1000-5000 บาท ฯลฯ สามารถใช้ BETWEEN operator ใน
WHERE expression ได้
SELECT prdID,title,unitPrc FROM product WHERE unitPrc BETWEEN 1000 AND
5000 ORDER BY unitPrc ;
SELECT headLine FROM news WHERE CURDATE() BETWEEN pubDate AND endDate;
การเลือกข้อมูลที่มีค่าใน column ตามที่กำหนด หากเป็น column ที่เป็นตัวเลข สามารถใช้
เครื่องหมายดำเนินการเปรียบเทียบเช่นเดียวกับ operator ในภาษาโปรแกรมทั่วไปได้ ได้แก่ >, <, >=,
บทที่ 8
การแสดงรายการขอมูลจากฐานขอมูล
17. 311
<=, =, != เช่น WHERE gpa < 2.00 หรือ WHERE totalIncome >= 100000 หรือ WHERE
YTDamount != 0 หากเป็น column ชนิด string เช่น CHAR, VARCHAR, TEXT, LONGTEXT การ
เปรียบเทียบด้วยเครื่องหมาย = จะต้องมีข้อมูลที่ตรงกันเท่านั้น แต่หากต้องการเปรียบเทียบในลักษณะ
ของการค้นหาหรือการกรองโดยมีคำค้นหาปรากฏในส่วนใดส่วนหนึ่งของ column เช่นต้องการค้นราย
ชื่อภาพยนตร์ที่มีคำว่า "บ้าน" ไม่ว่าเป็นส่วนใดของชื่อภาพยนตร์ จะต้องใช้ LIKE operator ประกอบ
กับการใช้ wide card % หรือ _ โดยที่ % แทนอักขระใดๆ กี่ตัวก็ได้ ส่วน _ แทนอักขระ 1 ตัว
ตัวอย่าง เช่น
• แสดงรายการภาพยนตร์ที่ในชื่อมีคำว่า man
SELECT title FROM movie WHERE title LIKE "%man%" ;
• แสดงรายการสินค้าที่ลงท้ายด้วยคำว่า "mug"
SELECT prdID,title FROM product WHERE title LIKE "%mug" ;
• แสดงรายชื่อภาควิชาที่ขึ้นต้นด้วยคำว่า Computer
SELECT name FROM department WHERE name LIKE "Computer%" ;
• แสดงรายการที่มีรหัสเป็น MUGxx-x ซึ่ง xx เป็นอักขระใดๆ ก็ได้
SELECT prID,title FROM product WHERE prID LIKE "MUG__-_" ;
WEB PROGRAMMING
Using PHP. and MySQL.