Nov 27, 2008

อยู่ใน A แต่ไม่อยู่ใน B

ในระบบฐานข้่อมูลอย่าง mySQL มีหลายคำสั่งที่จะช่วยให้งานของเราง่ายขึ้น

อย่างคำสั่ง UNION ซึ่งนำการค้นข้อมูลจากหลายๆ คำค้นมาต่อเชื่อมกันเป็นตารางเดียว

คำสั่งนี้ บางคนอาจจะยังไม่ทราบ ผมขอเขียนตัวอย่างให้ดูสั้นๆ ล่ะกัน

(Query1) UNION (Query2)

โอ้ววว สั้นจริงๆ แฮะๆ

ผลลัพธ์ที่จะได้จากคำสั่งเมื่อกี้คือ

แถวที่เกิดขึ้นจะเกิดจาก ข้อมูลทั้งสองต่อเรียงกัน



เอาล่ะ สืบต่อจากหัวข้อก็คือ

ถ้าเราต้องการข้อมูลที่อยู่ในตารางที่หนึ่ง แต่ไม่อยู่ในตารางที่สอง

จะเขียนคำสั่งอย่างไรดี???

ก่อนหน้านี้ ผู้เขียนประสบปัญหาจากข้อมูลที่มีจำนวนมาก

ตัดสินใจไม่ได้สักที ว่าจะเริ่มคัดกรองอย่างไร

จนมาจบลงที่ ขั้นตอนง่ายๆ ของเรื่อง SUBSET


มาดูลักษณะคำสั่งที่ใช้กัน

- อยู่ทั้งใน A และ B

SELECT a.id FROM a LEFT JOIN b ON a.id = b.aid WHERE a.id IS NOT NULL or b.aid IS NOT NULL;

- อยู่ใน A แต่ไม่อยู่ ใน B

SELECT a.id FROM a LEFT JOIN b ON a.id = b.aid WHERE b.aid IS NULL;


ลองไปใช้ดูนะครับ

ลิงค์อ่านเพิ่มเติมนะครับ :: Link1

การตัดทศนิยมแบบปัดตัวเลขและไม่ปัดตัวเลข

เนื่องจากมีการคำนวณบางอย่างที่มีทศนิยมหลายตำแหน่ง

ซึ่งการทำงานรายงาน หรือทำเว็บหรือโปรแกรมที่เกี่ยวข้องนั้น

จำเป็นต้องศึกษา เรื่องของข้อมูลที่จะนำมาคำนวณเป็นอย่างดี

เพราะนั่นอาจจะเป็นจุดหนึ่งที่ทำให้ คุณต้องถูกฟ้องร้องทีหลังได้

หากไม่รอบคอบในครั้งนี้


การตัดตัวเลขทศนิยม มีการตัดอยู่สองแบบ

คือ ตัดแบบมีการปัดเศษ เช่น

1.7869 => ปัดให้เหลือสองตำแหน่ง => 1.79

หรือ ตัดแบบไม่สนใจทศนิยมตัวถัดไป เช่น

1.7869 => ปัดให้เหลือสองตำแหน่ง => 1.78

ทั้งสองกรณีมีโอกาสได้ใช้ทั้งนั้น


ซึ่ง mySQL มีความสามารถนี้อยู่เช่นกัน โดยการใช้ คำสั่งดังนี้

- ตัดแบบมีการปัดเศษ จะใช้ ROUND(X), ROUND(X,D)

ROUND(1.7869,2) => 1.79

- ตัดแบบไม่สนใจทศนิยมตัวถัดไป จะใช้ TRUNCATE(X,D)

TRUNCATE(1.7869,2) => 1.78

ขอให้โชคดีครับ ^ ^

ลิงค์เพิ่มเติมนะครับ :: Link1

Out of range value adjusted for column error!

หัวข้อนี้เกี่ยวข้องกับการแก้ปัญหากรณีที่ เราไปกำหนดให้ mySQL

ตรวจสอบชนิดข้อมูล รวมถึงขนาดข้อมูล ที่เปิดไว้ในตารางของฐานข้อมูล

ถ้าหาก ชนิดที่กรอก หรือกำหนดข้อมูลเกินที่ได้กำหนดไว้

mySQL ก็จะแจ้งเราให้รู้ดังข้อความประมาณนี้ (บรรทัดล่าง)

"Out of range value adjusted..."


มันเป็นเรื่องถูกต้องแล้วล่ะที่ mySQL ไม่ยอมให้เรา Insert Data

เพราะข้อมูลที่ถูกนำเข้่าไป อาจจะขาดหาย หรือไม่สมบูรณ์

ซึ่งน่าจะส่งผลเสียในภายหลังได้

แต่ทั้งนี้บางคนอยากจะเปิดให้ยอมให้กรอกข้อมูลเข้าไปได้

เราก็มีวิธีมาแนะนำ ดังนี้

เข้าไปแก้ไฟล์ my.ini ของ mySQL

โดยไปปิดคำสั่งเอาไว้ ลองเทียบดูกับคำสั่งด้านล่างนะครับ

--------------------------------
# Set the SQL mode to strict
#sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
--------------------------------

เมื่อ restart service mySQL ก็จะสามารถนำข้อมูลเ้จ้าปัญหาดังกล่าว เข้าสู่ตารางข้อมูลได้แล้ว ครับ ^ ^

ข้อมูลที่เกี่ยวข้อง ::
Link1

กำหนดให้ mySQL อ่านภาษาไทยได้

หลายๆ คนที่เริ่มทำงานไปสักพัก ก็ต้องมีบ้างที่รู้สึกว่า

บางส่วนในงานเริ่มทำงานไม่ได้ดั่งใจ

สำหรับชาวไอที หรือบรรดาผู้พัฒนาโปรแกรมมือใหม่

ที่จำเป็นต้องติดต่อฐานข้อมูล เช่น PHP+mySQL หรือ JSP+mySQL

มักจะเริ่มต้นพัฒนาด้วยการติดตั้ง Appserv ซึ่งเป็นตัวที่รวมเครื่องมือ

ให้สามารถลงได้สะดวก คือลงเสร็จ ก็สามารถพัฒนาเว็บไซต์

ภาษา PHP กับ mySQL ได้ทันที โดยไม่จำเป็นต้องมีความรู้อะไรมากนัก



จริงอยู่ ที่ว่า Appserv มีประโยชน์ที่ทำให้เราสามารถเริ่มพัฒนางานได้เร็วขึ้น

แต่ถ้าหากได้ทำงานในองค์กร แล้วล่ะก็ทางเลือกที่จะใช้ Appserv นั้นดูจะไม่เหมาะนัก

ผู้เขียนเองแม้ยังเป็นเพียงผู้พัฒนาวัยละอ่อน แต่คาดว่า นี่อาจเป็นทางเลือกที่ดีกว่า ^ ^


อย่ากลัว! ที่จะเปลี่ยนแปลง

ความรู้ที่ใหม่ๆ บางครั้ง มันก็ได้มาพร้อมกับปัญหาที่ใหม่ๆ เหมือนกัน

เอาล่ะปัญหา แรกที่เราน่าจะพบกัน

คือปัญหาการแสดงผลภาษาไทยของ mySQL

สิ่งที่สังเกตได้ว่าเราเข้าข่ายที่ต้องแก้ไข mySQL ให้ภาษาไทยกลับมาอ่านออกเขียนได้กัน

อันดับแีรก เข้าไปหาไฟล์ ชื่อ my.ini หรือ my.cnf (Linux)

จากนั้น นำบรรทัดข้างล่าง ไปเทียบแล้ว เพิ่มเข้าไป

mySQL ของเรา เมื่อ restart service ก็จะสามารถอ่านภาษาไทยได้แล้ว ^ ^

---------------------------------------------
[mysqld]
skip-character-set-client-handshake
default-character-set=tis620
init_connect='SET collation_connection = tis620_thai_ci'
init_connect='SET NAMES tis620'
---------------------------------------------

หวังว่าคงจะทำได้กันนะครับ

Blog Comment

บทความที่ได้รับความนิยม