Posts Tagged ‘mysql’
UPDATE using SELECT
การนำข้อมูลจากตารางหนึ่งไปอัพเดทในอีกตาราง โดยไม่ต้องเขียนโปรแกรม ไม่ต้องมานั่งวน loop โดยการเขียน query จะคล้ายๆ การทำ INSERT with SELECT
Update using Select
เวลาที่เราจะ update ข้อมูลปกติ เราจะเขียนแบบนี้
UPDATE authors SET au_fname='Bill' WHERE au_id='123-45-6789'
แต่ถ้าข้อมูลที่ใช้อัพเดทมาจากอีกตาราง เราก็ select มาใส่เลย แบบนี้
UPDATE california_authors ca SET ca.au_fname=( SELECT a.au_fname FROM authors a WHERE a.au_id= ca.au_id)
เก็บไว้เป็นอีกเทคนึงนะคะ ^^
ซ่อม database mysql
เมื่อวานถึงกับมึน ว่าอยู่ๆ มันก็พังไปซะงั้น ทั้งๆ ทั้ก็ไม่ได้ทำอะไรนี่นา T_T
เริ่งเกิดที่ http://www.thaihosttalk.com/index.php?topic=20692.0 นี่ครับ
นั่งทำนานแสนนานกับ mysql ตกลงแล้ว database พัง แล้วไปพังที่ใหนรู้ใหมครับ mysql.user ให้ตายซิ run mysql ก็ไ่ม่ได้
พี่ไก่ thaitumweb เลยให้ซ่อมซะคือ
myisamchk -r user.MYI
ได้ครับ โหคราวนี้ ซ่อมหมดเลยดังนี้
myisamchk -r /var/lib/mysql/*/*.MYI
ไปหลาย database เลย อะไรมันจะซวยปานนี้ ใครที่ทำกันกันตรวจกันบ่อยๆนะ
API เบื้องต้น และแนวคิดของ API
API นั้นเราอาจจะได้ยินกันบ่อยๆ ช่วงนี้ เอ่ หรือเราได้ยินไปเองหว่า 555 และช่วงหลังๆ เองก็มีการจัดงาน camp เกี่ยวกับ API อีกด้วย
API นั้น ย่อมาจาก application programming interface ซึ่งหมายถึง ตัวเชื่อมกับ application นั้นเอง
ในความจริงแล้ว API นั้นถ้าจะคิดง่ายๆ แล้วก็เหมือนกับ function หนึ่งๆ นะให้คิดว่าเป็นแบบนี้ (ถึงจะสื่อความหมายผิดเพี้ยนไป) เพราะ Interface นั้นก็คือ สิ่งที่เราใส่ input ลงไปแล้วได้ผลลัพธ์ ออกมานั่นเอง
ถ้าให้คิดว่าเป็นเหมือน function แล้วแม้แต่เด็กที่เริ่มเขียนโปรแกรมใหม่ๆ เองก็ยังพอเข้าใจ เพราะความจริงแล้วมันก็ไม่ได้ยากอย่างที่คิดหรอก
API นั้นมีหลายแบบและแตกต่างกันมาก ทั้งในเรื่องของภาษาในการเขียนโปรแกรมออกมาและการเรียกใช้งาน และอย่างอื่นอีกมากมาย แต่ที่ใหญ่ๆ ก็ 2 ตัวที่บอกไปเนี่ยแหละ
API เองถูกประยุกต์ใช้มาตั้งแต่นานนมมาแล้ว ติดปัญหาที่ภาษาในการเรียกใช้ซะมาก การที่จะเรียกใช้ API ที่เขียนขึ้นมาได้จึงต้องเขียนภาษาเดียวกันจึงจะเรียกใช้กันได้ ข้ามสายพันธ์ไม่ได้่เลยทีเดียว
ช่วงหลังๆ ได้มี XML ซึ่งเป็นภาษาในการแลกเปลี่ยนข้อมูลทำให้ข้อจำกัดพวกนี้หายไป เขียนอะไรก็ได้ gen ออกมาให้เป็น XML ให้ได้ก็พอ ส่วนอีกฝ่ายก็จะเขียนโปรแกรมสำหรับอ่าน XML แล้วนำ data เอาไปใช้ แค่นั้นเอง
การเรียกใช้ API นั้นอย่าคิดว่าเป็นการเรียกกันข้ามเครื่อง หรือ เรียกๆกันผ่านเว็บอย่างเดียวนะ เพราะ ก่อนที่จะมีเว็บ ก็มีการใช้ API กันแล้ว โดย API ที่ออกมาเป็นชุดๆ สำหรับใช้งานได้เลย ก็คือ library นั้นเอง แต่ จะเป็นขั้นก่อนนิดนึง ตรงที่ library เองจะทำงานด้วยตัวเองไม่ได้แค่นั้น
ตัวอย่างของ API ที่เรา(อาจ)เห็นกันบ่อยๆ ก็เช่น เราติดต่อไปหา mysql นั่นแหละ ให้คิดดูดีๆ ว่า กว่ามันจะไปเรียก ข้อมูลมาจาก mysql ต้องทำอะไรบ้าง
ถ้า้เป็น PHP เองก็ต้องเขียน
mysql_connect(xxx,xxx,xxx,xxx);
ซึ่งตรงนี้หมายถึงอะไร ก็หมายถึง เราเรียก function นั่นเอง แต่ว่าเป็น function มาตราฐานแค่นั้นเอง เลยเหมือนกับมีมาให้แต่ต้นไม่ต้องไปเอา library มาจากที่อื่นแค่นั้นเอง แล้ว API มันอยู่ตรงใหน นั่นซิ ก็ใน function นี้ยังไงล่ะครับ
คิดว่าอยู่ๆ เรียก mysql_connect แล้วมันติดต่อได้เลยเหรอ ไม่ใช่แบบนั้นหรอกนะ มีทั้ง code ที่ต้อง connect กัน แล้วให้รู้กันได้ รูปแบบข้อมูลในการส่ง ว่าจะต้องส่งอะไรไปก่อนหลัง การ authenication กัน ว่ามีสิทธ์ที่จะผ่านเข้ามาได้หรือไม่ได้ โอ้ย เพียบไปหมด แต่นั้นเราไม่จำเป็นต้องรู้ นั่นแหละคือ API
เรารออยู่อย่างเดียวคือ return value ก็พอแล้ว
ตัวอย่างข้างบนก็เป็นตัวอย่างที่ให้พอได้เข้าใจเฉยๆ นะ API นั้นจะว่าให้ลึกๆ สลับซับซ้อนแล้วก็ หลากหลายรูปแบบมาก ยกตัวอย่าง API ใหม่ๆ เช่น Web Service เป็นต้น Web Service เองจะว่าไปก็ API ดีๆ นี่เอง แต่การเรียกใช้ การติดต่อนั้นต่างกันฟ้ากับก้นเหวเลย
mysql สูงสุดของ field type text
พอดีวันนี้เจอปัญหาของลูกค้าบ่อยๆ คือ การทำ description ที่ใหญ่ๆ แบบ ทำหน้าทั้งหน้าไว้ใน description หรือไป copy มานั่นเอง แล้วเราก็กำหนด description เป็น type text แล้ว แต่ดันเก็บไม่พอ 555 ใหญ่เกินนั้นเอง เวลาแสดงหน้าเว็บเลย เรียกว่าผิดรูปกันไปเลยทีเดียวเลยไปหาว่า type text เก็บได้เท่าใหร่ไปเจอที่ หนึ่งคือ http://simonwillison.net/2002/Aug/1/mysqlTextLimits/
เค้าได้บอกไว้ว่า
Today’s scary discovery: MySQL TEXT fields have a limit of 65,000 bytes. If you insert anything larger than that in to a normal TEXT field mySQL will silently truncate your data without telling you (meaning software checks are probably a good idea). MEDIUMTEXT will store 16 million characters and LONGTEXT can handle over 4 trillion, but this information does not appear to be readily available in the online mySQL manual (although it is hinted at in this table). Something to bare in mind when designing database applications.
ตรงส่วนที่เขียวก็คือปริมาณในการเก็บของแต่ละ type นั้นเอง
text จะเก็บได้ 65,000 byte นั้นเอง ถ้าคิดเป็น utf แล้วเก็บภาษาไทยก็ยิ่งน้อยไปใหญ่
mediumtext เก็บได้ 16 million byte หรือ 16 ล้าน หรือ 16 MB เพิ่มมา 240 กว่าเท่าก็ใหญ่พอควร ในการเก็บข้อมูลที่ใหญ่ แค่นี้ก้พอแล้วนะสำหรับ description ที่ copy html มาของลูกค้า แต่ก็มีอีกอันที่ใหญ่กว่าคือ
longtext นี่เก็ยได้เิบิ้มเลย 4 trillion หรือ 4 แสนล้าน นั้นเอง
database แค่ record เดียวโตมากๆไม่ดีนะ ดูที่ความจำกัดเวลาใช้ด้วย
mysql2timestamp (php)
function mysql2timestamp($datetime){
$val = explode(" ",$datetime);
$date = explode("-",$val[0]);
$time = explode(":",$val[1]);
return mktime($time[0],$time[1],$time[2],$date[1],$date[2],$date[0]);
}
