Thaimisc.com : PHP กับฐานข้อมูล MySQL (27)
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 (27)
เขียนโดย เดอะกาฝากไดอารี่ (ball@bbznet.com) , 31-07-2004
เหนื่อยครับ ช่วงนี้ งานเยอะ แต่ก็อยากจะอัพเดตเนื้อหาซะบ้าง เพราะอู้มานานแล้ว ก็พยายามจะมาอัพเดตให้บ่อยๆ พอหันไปดูเรื่อง Software Corner ที่ดูแลอยู่ อ้าว... ไม่ได้อัพเดตมานานพอดูเหมือนกัน เลยต้องเอาเรื่องการทำ animation มาเล่าสู่กันอ่านบ้าง (อ๊ะๆ เรื่อง Flash นี่ผมสอนไม่ไหวครับ มันเกินตัวผมไปหน่อย... ผมไม่ใช่ Web Developer นะครับ :) )

คนเรามันไม่ได้เก่งไปซะทุกอย่างครับ และเหนือฟ้าก็ยังมีฟ้า อันนี้เป็นความจริงที่ต้องรับรู้กันเอาไว้... ผมอาจจะดูเก่งกาจในสายตาแฟนานุแฟนท่านผู้อ่านทั้งหลาย แต่ผมก็ไม่ได้เก่งไปซะทุกเรื่อง เห็นไหมครับ เรื่อง flash animation นี่ ผมทำไม่เป็นเอาซะเลย และก็มีคนที่เก่งเรื่อง PHP เยอะกว่าผมเยอะ เพียงแต่เขาไม่แสดงตัวออกมาเท่านั้นเองแหละครับ :) คนในโลกตั้ง 6 พันล้านคน จะให้ผมเก่งสุดในโลกก็คงเวอร์ไป จริงไหมครับ :p

กลับมาที่เรื่องของ PHP ของเรากันต่อครับ... ไม่สิ เรื่องของ MySQL โดยการสืบค้นหลายตารางพร้อมๆ กันต่างหาก (ชักเบลอ)

Query หลายตาราง (ของจริง)
อันนี้เป็นการสืบค้นจากหลายตารางแบบแท้ๆ เลยครับ ไม่ได้มีเรื่องของการ JOIN มาเกี่ยวข้องเลย แต่ก็ได้ผลลัพธ์แบบเดียวกันครับ สำหรับส่วนตัวผมเองแล้ว ผมว่าการสืบค้นหลายตารางวิธีนี้ ผมชอบมากกว่าด้วยซ้ำ เพราะโค้ดดูง่ายกว่าเยอะครับ... ส่วนจะมีรูปแบบอย่างไรนั้น ขอให้ดูตัวอย่างแล้วกันนะครับ คงจะทำความเข้าใจได้เร็วกว่า

ลองเขียนโค้ด PHP ที่จะให้ได้ผลลัพธ์แบบเดียวกันกับการทำ INNER JOIN หรือ LEFT JOIN ดังที่กล่าวถึงในตอนก่อนๆ ดูนะครับ

<?php

//คราวนี้ลองแบบวิธีสุดท้ายดูครับ
$conn = mysql_connect("localhost", "root", "perubear42"); //เชื่อมต่อกับฐานข้อมูล
mysql_select_db("company"); //เลือกใช้ฐานข้อมูลชื่อ company
$sql = "SELECT * FROM employee a, department_mstr b, position_mstr c";
$sql .= " WHERE a.dept_id = b.dept_id AND a.pos_id = c.pos_id";
$result = mysql_query($sql);
while ($data = mysql_fetch_array($result)) {

echo $data['eid']. ":". $data['name']. ":". $data['pos_name']. ":". $data['dept_name']. ":". $data['salary']. "<br>";

}

?>

ผลลัพธ์ที่ได้ ก็จะเป็น

เหมือนวิธีที่กล่าวถึงก่อนหน้าทั้ง 2 วิธีครับ

วิธีนี้มีจุดสังเกตนิดหน่อยนะครับ กล่าวคือขอให้ดูตรง SELECT * FROM employee a, department_mstr b, position_mstr c ให้ดีๆ พอจะทราบไหมครับว่า ไอ้ a, b, c พวกนี้มีไว้ทำอะไร?!? คำตอบอยู่ในส่วนของเงื่อนไข ที่อยู่ข้างหลัง WHERE ไงล่ะครับ การที่เราใส่ a, b, c เข้าไป หลังชื่อตาราง มันจะมีความหมายว่า ให้แทนชื่อตารางนี้ ด้วยตัวอักษร หรือข้อความที่ตามหลังครับ... (เนื่องจากเป้าหมายของเราคือการย่อชื่อตาราง ดังนั้นผมเลยสะดวกกับการแทนด้วย a, b, c... ไงล่ะครับ แต่อาจจะทำให้ใครหลายๆ คน สับสนได้)

พอเราแทนชื่อตาราง employee, department_mstr และ position_mstr ด้วย a, b และ c ตามลำดับแล้ว เมื่อถึงเวลาที่เราต้องการอ้างอิงถึง เราก็แค่แทนที่ชื่อตารางเหล่านี้ด้วย a, b หรือ c แทนเท่านั้นเอง

ดังนั้น a.dept_id = b.dept_id จะมีความหมายเหมือนกับ employee.dept_id = department_mstr.dept_id นั่นเอง เห็นไหมครับ ย่อไปได้ตั้งเยอะ

ที่ผมชอบวิธีนี้ เพราะว่าหลักการของมัน จะคล้ายกับการสืบค้นข้อมูลจากตารางเดี่ยวๆ มากครับ ลองเปรียบเทียบดูนะครับ

แบบเดี่ยว : SELECT * FROM ชื่อตาราง WHERE เงื่อนไข

แบบหลายตาราง : SELECT * FROM ชื่อตาราง1, ชื่อตาราง2,.. , ชื่อตารางn WHERE เงื่อนไข

เห็นไหมครับ มันต่างกันนิดเดียวเอง แค่ใส่ชื่อตารางให้เยอะขึ้น ส่วนเงื่อนไขนั้นก็อย่างที่เห็นในตัวอย่าง มันก็ไม่ได้แตกต่างอะไรจาก INNER JOIN กับ LEFT JOIN เลยครับ

และเช่นกัน หากเราต้องการข้อมูลเพียงแค่บางฟิลด์ เราก็แค่เปลี่ยน * ไปเป็นชื่อฟิลด์ได้ เช่น

<?php

//ลอง query เอาเฉพาะบางฟิลด์พอครับ
$conn = mysql_connect("localhost", "root", "perubear42"); //เชื่อมต่อกับฐานข้อมูล
mysql_select_db("company"); //เลือกใช้ฐานข้อมูลชื่อ company
$sql = "SELECT a.name, b.dept_name, c.pos_name FROM employee a, department_mstr b, position_mstr c";
$sql .= " WHERE a.dept_id = b.dept_id AND a.pos_id = c.pos_id";
$result = mysql_query($sql);
while ($data = mysql_fetch_array($result)) {

echo $data['eid']. ":". $data['name']. ":". $data['pos_name']. ":". $data['dept_name']. ":". $data['salary']. "<br>";

}

?>

มาดูผลลัพธ์กันนะครับ

จะสังเกตว่า ข้อมูล $data['eid'] กับ $data['salary'] หายไปใช่ไหมครับ ทั้งนี้ก็เพราะว่าเราไม่ได้ query มันออกมานั่นเองครับ

เรื่องของการสืบค้นข้อมูลหลายตาราง ก็ขอจบลง ณ ตรงนี้ครับ และผมก็ขอปิดคอร์สเรื่อง PHP กับ ฐานข้อมูล MySQL เอาไว้แต่เพียงเท่านี้ด้วยเช่นกัน ต่อจากตอนนี้ จะเป็นเรื่องพื้นฐานการทำงานเปิดไฟล์ ปิดไฟล์ และบันทึกข้อมูลลงไฟล์ โดยการใช้ PHP ครับ จบจากตรงนี้ผมก็จะเข้าสู่เรื่องของการสร้างโปรเจ็คง่ายๆ ขึ้นมา เพื่อใช้ฝึกหัดฝีมือการพัฒนาเว็บแอปพลิเคชั่นด้วย PHP ซะทีครับ (คิดว่า แฟนานุแฟน ท่านผู้อ่านทั้งหลาย คงเฝ้ารอวันนี้มานานเต็มที)

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

<- 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