MySQL

3 Tables INNER JOIN

สมัยเรียนเป็นเด็กสาย HPC ความรู้เรื่อง database เลยไม่เยอะเท่าไร มีตามตำราคือ 1 คอร์ส ซึ่งก็ได้มาเฉพาะความรู้พื้นฐานพวก all or none กับคำสั่งพื้นๆ ไว้เอาตัวรอดอย่างเช่น select, insert อะไรพวกนี้ อย่างอื่นสอบเสร็จก็ลืมหมด

วันนี้ดันต้องมา join ตาราง เป็น inner join ธรรมดาไม่มีอะไรพิสดาร เพียงแต่ไม่รู้ว่าถ้า join 3 ตารางแล้ว syntax มันเป็นไง ตัวอย่างในเว็บก็มีแต่โชว์ 2 ตาราง จะมั่วใส่ comma ไปก็คิดว่าไม่น่าใช่

สุดท้ายก็ได้รับความช่วยเหลือจาก sugree (อีกแล้ว) ไว้ครบปีสงสัยต้องเลี้ยงตอบแทนซักที

SELECT * FROM y INNER JOIN x ON x.a=y.a INNER JOIN z ON x.a = z.a WHERE condition

ถ้ากลัวงงก็ใส่วงเล็บครอบได้

SELECT * FROM (y INNER JOIN x ON x.a=y.a) INNER JOIN z ON x.a = z.a WHERE condition

MAMP

แพกเกจชุด LAMP บน Mac OS X นั้นค่อนข้างเก่า Apache 1.3 กับ PHP4 ส่วน MySQL ต้องหามาลงเพิ่ม (สะดวกหน่อยมีเป็น .dmg) ดังนั้นถ้าอยากได้ Apache 2.0+PHP5 ก็ต้องคอมไพล์เอง (หรือใช้ DarwinPort) ซึ่งก็มีขั้นตอนวิธีมากมายเป็นอุปสรรคขวางหน้า MySQL บนแมคก็มีปัญหาเรื่องที่อยู่ของ socket อีกด้วย

ปัญหาทั้งหมดแก้ได้ด้วย MAMP

นอกจาก Apache2, PHP5, MySQL5 ก็ยังมี phpMyAdmin และ SQLite มาให้ด้วย ที่ผมชอบคือเค้าตั้งพอร์ตของ Apache กับ MySQL มาไม่ชนกับของเก่า ทำให้ลงคู่กันได้โดยไม่ต้องทำอะไรเพิ่ม (ถ้าอยากเปลี่ยนก็แก้ได้ในตัวโปรแกรมเลย อันนี้รวมถึง DocumentRoot)

ไม่ชอบนิดเดียวตรงหน้าเว็บสำหรับคอนฟิกใช้เฟรม ซึ่งพอเอา phpMyAdmin ไปใส่ในเฟรมอีกชั้นนึง มันมองแทบไม่เห็นอะไร

ตอนเรียนเผอิญไม่ได้มาสาย database เลยมีความรู้พื้นฐานมาแค่การ select, insert table กับท่าไม้ตายเวลาเจ๊งคือ drop database

แต่เผอิญวันนี้มีคนถามเรื่อง Oracle-to-MySQL migration (ซึ่งตอบไม่ได้อยู่แล้ว) แต่คิดไปคิดมา พวกนี้ก็เป็นโอกาสธุรกิจ กรณีเดียวกับ MS Office-to-OpenOffice ซึ่งช่วงนี้หน่วยงานในประเทศหลายแห่งเริ่มสนใจกันเยอะ เลยไปลองค้นๆ ดู

MySQL มี Migration Toolkit อยู่แล้ว แต่คงโดนคำถามนี้เยอะ จนต้องมี flash demo

ประเด็นที่น่าหาคำตอบคือ ใช้กับ Oracle XE ได้หรือไม่ ถ้ามีเวลาจะมาลอง

อ่าน เปรียบเทียบฟีเจอร์ Relational Database พบว่า PostgreSQL นี่ฟัดเหวี่ยงกับ Oracle Enterprise เลยแฮะ เพียงแต่ ecosystem ของตัวซอฟต์แวร์อาจต้องใช้เวลาอีกซักพัก ถึงจะรุกเข้าตลาดองค์กรได้

หลายคนอาจจะเคยทำเว็บมากันบ้างนะครับ อาจจะทำเว็บส่วนตัว หรือที่ทำงานสั่งให้ทำเว็บขององค์กร เมื่อพูดถึงเว็บ สิ่งแรกที่ทุกคนต้องนึกถึงภาษา HTML ที่ใช้สร้างเว็บ แต่ถ้าต้องการให้เว็บของเรามีลูกเล่น ตอบโต้กับผู้ใช้ได้ เป็นเว็บขนาดใหญ่ ที่มีผู้เข้าชมจำนวนมาก ก็จะเริ่มมีเทคโนโลยีใหม่ๆ เข้ามา อย่างเช่น พวกภาษา PHP, ASP หรือ JSP ที่ช่วยให้เว็บนั้นมีความ”อัตโนมัติ”มากขึ้น ทำให้หน้าตาเว็บเพจทุกหน้าไปในโทนเดียวกัน แถมยังสะดวกในการดูแลรักษา



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



แต่โลกเราตอนนี้กำลังอยู่ในกระแสซอพท์แวร์โอเพ่นซอร์ส ในเมื่อสามารถลดค่าซอพท์แวร์ได้ ทำไมจะไม่เอาล่ะครับ เอาเงินไปจ้างผู้ดูแลเก่งๆ แทนดีกว่า ชุดซอพท์แวร์โอเพ่นซอร์สสำหรับการทำเว็บเซิร์ฟเวอร์ มีชื่อเรียกเล่นๆ ว่า LAMP



LAMP ย่อมาจากอักษรตัวแรกของซอพท์แวร์เสรี 4 ตัวที่ทำหน้าที่ต่างๆ สำหรับเว็บเซิร์ฟเวอร์ นอกจากทุกตัวจะฟรีแล้ว ความสามารถก็ยังล้นเหลือ และได้รับความนิยมอย่างสูง โดยเว็บไซท์ทั่วโลกที่สร้างด้วยชุด LAMP นี้ มีมากกว่า Windows Server ที่ลง Internet Information Server และรัน ASP หลายช่วงตัวทีเดียว ...อะแฮ่ม...อย่าหาว่าคุย



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



A ตัวที่สอง มาจากคำว่า Apache สุดยอดเว็บเซิร์ฟเวอร์อีกตัว ที่เคยแนะนำในคอลัมน์นี้ไปแล้ว จากการสำรวจของ Netcraft ประมาณ 60% ของเว็บไซท์ทั่วโลกรันอยู่บน Apache นอกจากประสิทธิภาพจะดี รับโหลดได้เยอะ Apache ยังพัฒนาเตรียมรับกับเทคโนโลยีใหม่ๆ ที่กำลังจะมาในอนาคต เช่น เว็บแอพพลิเคชั่นหรือเว็บเซอร์วิส มีโครงการย่อยมากมายกำลังถูกพัฒนาอยู่ใต้ร่มเงาของ Apache โดยเฉพาะด้านจาวา และ XML เช่น โครงการ Tomcat, Ant, Jarkata, Xerces แถมยังหาได้ง่ายเพราะมากับลินิกซ์แทบทุกตัวอยู่แล้ว



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



P ตัวสุดท้าย มาจาก Perl/PHP/Python หมายถึงภาษาที่ใช้พัฒนาเว็บไซท์นั่นเอง ทั้งสามตัวเป็นภาษาสคริปต์ เขียนง่าย โค้ดจะสั้นๆ ไม่ซับซ้อน ส่วนมากใช้เรียกข้อมูลจากฐานข้อมูล MySQL หรือ PostgreSQL แล้วนำมาแสดงผลเป็น HTML เพื่อให้ได้เว็บไซท์แบบไดนามิก เดิมที Perl ได้รับความนิยมมาก่อน ปัจจุบันตลาดหันมาใช้ PHP เพราะเขียนง่ายกว่า และออกแบบมาสำหรับการทำเว็บโดยเฉพาะ (PHP ย่อมาจาก Personal Home Page) ส่วน Python เป็นภาษาใหม่ที่กำลังรุ่ง เพราะเขียนง่าย มีประสิทธิภาพสูง ทั้งสามตัวมากับลินิกซ์แทบทุกยี่ห้อเหมือนกัน ถ้าใครใช้วินโดว์ก็สามารถดาวน์โหลดมาใช้งานได้ฟรีๆ มีหนังสือภาษาไทยสอนการเขียน Perl/PHP เพื่อทำเว็บหลายสิบเล่มในท้องตลาด เลือกใช้งานได้ตามถนัดเช่นกันครับ (ถ้าไม่รู้ว่าจะเลือกอะไร ก็แนะนำ PHP ครับ ง่ายดี)



รู้จัก LAMP ครบทั้ง 4 ตัวไปแล้ว เมื่อมีตัวซอพท์แวร์แล้ว เว็บไซท์จะไปรุ่งหรือเปล่า อันนี้ต้องขึ้นกับ”คนดูแล”เว็บไซท์แล้ว ว่าจะทำงานกับโปรแกรมพวกนี้ได้ดีขนาดไหน ซึ่งก็ต้องอาศัยการฝึกฝนอยู่บ้าง ในอินเทอร์เน็ตมีคู่มือสอนการใช้งาน LAMP มากมาย (สามารถค้นหาด้วยคำว่า LAMP ได้เลย เพราะกลายเป็นคำสามัญไปแล้ว) หนังสือภาษาไทยมีหลายเล่มเช่นกัน ที่สอนใช้โปรแกรมในตระกูลนี้ ถ้ามีปัญหาก็มีชุมชนนักพัฒนาเว็บไซท์ด้วย LAMP อีกมากที่คอยให้ความช่วยเหลือเราได้ ขอให้ประสบความสำเร็จในการตั้งเว็บครับ

10.4.4 MySQL Issue

After upgrading to Mac OS X 10.4.4, I have some problem with MySQL 5.0.



It seems runnable but all of my CMS (Drupal, phpMyAdmin) can't connect to database server. After googling around, this is caused by socket location problem. 10.4.4 PHP is pointed to /var/mysql/mysql.sock while default MySQL configuration is /etc/mysql.sock.



This is long known bug of Mac OS X 10.4 series. I still don't understand why it just happens on my 10.4.4 but not 10.4.3.



Anyway, the solution is creating /etc/my.cnf with these line:

[mysqld]

socket=/var/mysql/mysql.sock

Don't forget to set permission of /var/mysql to 775.



Launching MySQL daemon from Preferences (in case you installed MySQL Preferences too) still show "stop" state but it is actually running and works fine.



This discovery begin by I want to test K2 Drupal port by my friend, iChris.



P.S. My furthure advice is a simple php file with only one line:

<?php phpinfo(); ?>

is extremely useful for debugging.