Thaimisc.com : PHP กับฐานข้อมูล MySQL (17)
ThaiMisc.Com : Free Webboard | Free GuestBook | Free Poll | Free Ecard Server | Free Java Chat Room | Advertising | Contact Us | Colocation | Web Hosting | เปิดร้านค้าฟรี


Category : Php Developer Print Article Only Print Aticle With Comment
PHP กับฐานข้อมูล MySQL (17)
เขียนโดย เดอะกาฝากไดอารี่ (ball@bbznet.com) , 11-06-2004

ตอนที่แล้ว เราได้รู้กันไปแล้วว่าเราจะเอาข้อมูลต่างๆ แทรกลงไปในตารางฐานข้อมูลกันได้อย่างไร... ไม่ยากใช่ไหมล่ะครับ?!? แต่ว่าข้อมูลของเรามันไม่ได้มีเพียงแต่เพิ่มเข้าไปเฉยๆ นะครับ ยกตัวอย่างตารางฐานข้อมูลพนักงานในบริษัทก็ได้ นอกจากจะมีพนักงานเข้าใหม่แล้ว ก็ยังอาจจะมีโอกาสที่พนักงานเก่าๆ ลาออกไป (ทำให้ต้องลบข้อมูลออกจากฐานข้อมูล) หรือบางทีก็อาจจะมีกรณีที่ต้องมีการเปลี่ยนแปลงข้อมูลของพนักงานบ้าง (เช่น เงินเดือนขึ้น, ย้ายแผนก หรือแต่งงาน เปลี่ยนชื่อ-นามสกุล เป็นต้น)

ลองแก้ข้อมูลในตารางฐานข้อมูลด้วย phpMyAdmin กันก่อน
ก่อนอื่นเรามาลองแก้ข้อมูลกันด้วย phpMyAdmin กันก่อนครับ... เพราะยังไงๆ เสีย การดูแลจัดการฐานข้อมูลบางอย่าง การทำผ่าน phpMyAdmin มันก็ช่วยเราได้อย่างมาก


ไอคอนแก้ไขข้อมูล

ดูรูปประกอบนะครับ... ตอนนี้เราอยู่ที่หน้าจอ "เปิดดู" ที่เอาไว้แสดงข้อมูลที่เก็บเอาไว้ในตารางฐานข้อมูล (ในที่นี้คือตาราง employee ของเรานั่นเอง) เราจะเห็นไอคอนรูปดินสอกับกระดาษเล็กๆ ที่หน้าระเบียนทุกๆ ระเบียนที่ถูกแสดงอยู่ (ส่วนรูปถังขยะนั้นจะกล่าวถึงในภายหลัง) ซึ่งมีความหมายคือ เอาไว้แก้ไขข้อมูลระเบียนนั้นๆ นั่นเอง

ตอนนี้ติ๊ต่างว่า เราเปลี่ยนชื่อแผนก Accounting (แผนกบัญชี) ไปเป็นแผนกการเงิร (Finance) แทน... ก็ขอให้เราคลิกไปที่ไอคอน  ที่หน้าระเบียนครับ

หน้าจอที่ปรากฏต่อมาคือหน้าจอที่ละม้ายกับหน้าจอสำหรับแทรกระเบียนนั่นเองครับ... แต่งานนี้ที่แปลกตาขึ้นมาหน่อยก็คือ ตรงหัวข้อ "ค่า" นั้น มีข้อมูลบางอย่างถูกบันทึกเอาไว้ก่อนแล้ว ซึ่งก็คือข้อมูลที่เราแทรกเอาไว้ก่อนหน้านี้นั่นเอง

สิ่งที่เราต้องทำก็คือ แก้ไขคำว่า Accounting ในฟิลด์ department เป็น Finance เท่านั้น แล้วก็คลิกที่ปุ่ม "ลงมือ" ได้เลย... ส่วนตัวเลือกนั้นให้เราเลือกที่จะ "ส่งกลับ" (ดังรูป) เพื่อที่เราจะกลับไปยังหน้าจอแสดงโครงสร้างของตารางฐานข้อมูลอีกครั้ง

เราจะได้คำค้น SQL ว่า

UPDATE `employee` SET `department` = 'Finance' WHERE `name` = 'Sompong Nongsomchai' AND `position` = 'Manager' AND `department` = 'Accounting' AND CONCAT( `salary` ) = '30000.00' LIMIT 1 ;

ปรากฏอยู่ในหน้าจอส่วนคำค้น SQL ของโปรแกรม phpMyAdmin ครับ

ทีนี้พอคลิกไปที่หน้าจอ "เปิดดู" เราก็จะเห็นว่าข้อมูลในฟิลด์ department ของนาย Sompong Nongsomchai จากเดิมที่เป็น Accounting ได้กลายเป็น Finance ไปแล้ว

เรียนรู้คำสั่ง SQL ใหม่ : UPDATE
เอาละ ทีนี้มาดูส่วนของคำค้น SQL (หรือที่ผมมักเรียกว่า SQL Statement หรือ คำสั่ง SQL) กันดีกว่า... จะเห็นว่าคำสั่งมันยาวยืดมากทีเดียว แต่จริงๆ แล้ว มันไม่ได้มีอะไรมากมายนะครับ

คำสั่งในการอัพเดตข้อมูลในฐานข้อมูลใหม่ของ SQL ก็คือ

UPDATE ชื่อตาราง SET ชื่อฟิลด์1 = ค่าใหม่ในฟิลด์1[, ชื่อฟิลด์2 = ค่าใหม่ในฟิลด์2,... ชื่อฟิลด์n = ค่าใหม่ในฟิลด์n] [WHERE เงื่อนไข]

ตัวอักษร สีบานเย็น นั่นคือส่วนที่ไม่จำเป็นต้องใส่ครับ... ทีนี้เรามาวิเคราห์คำสั่ง UPDATE กันลึกๆ หน่อยดีกว่า

  • โครงสร้าง UPDATE ไม่ยากหรอกครับแค่ UPDATE ชื่อตาราง SET แค่นั้นเอง จากนั้นก็แค่ อยากกำหนดฟิลด์ไหนมีค่าอะไรก็ใส่มาตรงๆ เลย เช่น department = 'Finance' เป็นต้น ถ้าจะมีหลายฟิลด์ต่อเนื่องกัน ก็แค่คั่นด้วยเครื่องหมายจุลภาค ( , ) เท่านั้นเอง เพียงแต่มีข้อควรจำเอาไว้อย่างนึงก็คือ ข้ามลำดับที่ของฟิลด์ไม่ได้ครับ... เช่น ในตาราง employee ของเรานั้น ลำดับของฟิลด์คือ name, position, department, salary ดังนั้น สมมติเราต้องการแก้ข้อมูลในฟิลด์ name กับ department เราก็ต้องใช้ name = 'ชื่อใหม่', department = 'แผนกใหม่' ไม่สามารถที่จะใช้ department = 'แผนกใหม่', name = 'ชื่อใหม่' ได้
  • ส่วน WHERE เงื่อนไข นั้น แม้จะว่าไม่จำเป็นก็เถิดหนา แต่ถึงเวลาเอาเข้าจริงๆ ก็จำเป็น ทั้งนี้เพราะว่าปกติเวลาเราจะแก้ไขข้อมูลอะไร เราก็มักจะจำเพาะเจาะจงว่าจะแก้ไขเฉพาะระเบียนนี้ๆ ใช่ไหมล่ะครับ ดังนั้นเลยจำเป็นว่าจะต้องมีเงื่อนไขเอาไว้หน่อย ว่าจะแก้ไขข้อมูลในระเบียนไหน... แล้วจะเกิดอะไรขึ้น ถ้าเกิดเราไม่ระบุ?!? คำตอบก็คือ มันจะแก้ไขซะทุกระเบียนเลยไงครับ อย่างถ้าเราดันไปเขีนโค้ดว่า UPDATE employee SET department = 'Finance' แบบนี้เข้าให้ ผลที่ได้ก็คือ ทุกระเบียน จะโดนอัพเดตข้อมูลในฟิลด์ department ให้เป็น Finance หมดเลย

ทีนี้เรามาวิเคราะห์ต่ออีกนิด ถือเป็นของแถมของวันนี้ครับ ดูโค้ด SQL ที่ใช้อัพเดตข้อมูลอีกที

UPDATE `employee` SET `department` = 'Finance' WHERE `name` = 'Sompong Nongsomchai' AND `position` = 'Manager' AND `department` = 'Accounting' AND CONCAT( `salary` ) = '30000.00' LIMIT 1 ;

สังเกตไหมครับว่า เงื่อนไขใน WHERE นี่ ยาวเฟื้อยเชียว ต้องบอกละเอียดเชียวว่า name อะไร position ไหน department อะไร และ salary เท่าไหร่ (คำสั่ง CONCAT ที่เห็น คือคำสั่งที่เอาไว้เปลี่ยนข้อมูลในฟิลด์ salary ให้กลายเป็นตัวอักษร ทั้งนี้เนื่องจากว่าการกรอกข้อมูล 30000.00 นั้นไม่สามารถกรอกเป็นตัวเลขได้ เนื่องจากเครื่องหมายจุดทศนิยม เขาถือเป็นตัวอักษรนั่นเอง)

ไม่คิดว่ามันยุ่งยากบ้างเหรอครับ?!? มันจะมีวิธีอะไรที่ดีกว่านี้ไหม เวลาที่เราเขียนโค้ดมาเพื่อแก้ไขระเบียน จะได้อ้างอิงด้วยเงื่อนไข WHERE ง่ายๆ ไม่ต้องมาอ้างอิงยาวยืดขนาดนี้?!?

(ติดตามตอนต่อไป)

<- Back | Next ->

ThaiMisc.Com : Free Webboard | Free GuestBook | Free Poll | Free Ecard Server | Free Java Chat Room | Advertising | Contact Us
Copyright 1999-2006 Thailand Miscellaneous. Allrights reserved. webmaster@thaimisc.com