เมื่อเราทำการ เลือกข้อมูลจากฐานข้อมูลแล้ว ต้องการที่จะให้มันเรียงลำดับ เช่น
ในฐานข้อมูล ตารางคะแนน มีอยู่หนึ่ง ฟิวล์ เป็นชนิด text มีคะแนน 1 2 3 4 10 11 21 ตามลำดับ
เมื่อเราเขียน SQL ก็จะได้ว่า
SELECT * FROM tbl_test ORDER BY score DESC
มันจะเรียงลำดับให้เป็น 1 11 2 21 3 4 ถ้าหากต้องการจะให้มันเรียงลำดับเป็น 1 2 3 4 10 11 21
เปลี่ยน SQL ให้เป็นดังนี้
SELECT * FORM tbl_test ORDER BY ABS(score) DESC
* คำสั่ง ABS() ใช้สำหรับหาค่าสัมบูรณ์
แสดงบทความที่มีป้ายกำกับ SQL แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ SQL แสดงบทความทั้งหมด
20 เมษายน 2554
เรียงลำดับ ตัวเลข ในกรณีที่ไม่ได้เป็นชนิด int
17 ธันวาคม 2553
SQL การจัดรูปแบบวันที่ ก่อนนำมาแสดง
ด้วยคำสั่งต่อไปนี้
SELECT DATE_FORMAT( inv_datecreate, '%Y-%m-%d') AS date FROM `stock_inventory`
เป็นการจัดรูปแบบของฟิวล์ inv_datecreate ซึ่งมีรูปแบบ 2010-12-17 11:05:43 พอเรา query ข้อมูลออกมาด้วยคำสั่ง SQL ด้านบน จะแสดงข้อมูลเป็น
ดูรายละเอียดอื่น ๆ ได้ที่ http://www.w3schools.com/SQL/func_date_format.asp
SELECT DATE_FORMAT( inv_datecreate, '%Y-%m-%d') AS date FROM `stock_inventory`
เป็นการจัดรูปแบบของฟิวล์ inv_datecreate ซึ่งมีรูปแบบ 2010-12-17 11:05:43 พอเรา query ข้อมูลออกมาด้วยคำสั่ง SQL ด้านบน จะแสดงข้อมูลเป็น
2010-12-17 เท่านั้น
ดูรายละเอียดอื่น ๆ ได้ที่ http://www.w3schools.com/SQL/func_date_format.asp
17 กันยายน 2553
SQL เลือก ฟิววันที่ล่าสุด ของ อุปกรณ์แต่ละไอดี ที่ต้องการ
จากภาพข้างบน หากจะเอาวันที่่ล่าสุดของ product_bind_id ซึ่งมันจะนำวันที่ล่าสุดมา แต่จะไม่เอา status_id ตามวันที่ล่าสุดมา
แต่่หากจะเอามาต้องจะต้องมี SQL ดังข้างล่างครับ
SELECT tbl_check.check_date, tbl_check.product_bind_id, tbl_check.status_id
FROM tbl_check INNER JOIN tbl_product_bind ON (tbl_check .product_bind_id = tbl_product_bind.product_bind_id)
WHERE (tbl_check.product_bind_id, check_date) IN
( SELECT product_bind_id, MAX(check_date) FROM tbl_check GROUP BY product_bind_id)
จาก : http://stackoverflow.com/questions/121387/sql-fetch-the-row-which-has-the-max-value-for-a-column
หรืออีกหนึ่งทางเลือกจากพี่ปลาทู
แต่่หากจะเอามาต้องจะต้องมี SQL ดังข้างล่างครับ
SELECT tbl_check.check_date, tbl_check.product_bind_id, tbl_check.status_id
FROM tbl_check INNER JOIN tbl_product_bind ON (tbl_check .product_bind_id = tbl_product_bind.product_bind_id)
WHERE (tbl_check.product_bind_id, check_date) IN
( SELECT product_bind_id, MAX(check_date) FROM tbl_check GROUP BY product_bind_id)
จาก : http://stackoverflow.com/questions/121387/sql-fetch-the-row-which-has-the-max-value-for-a-column
หรืออีกหนึ่งทางเลือกจากพี่ปลาทู
select * FROM tbl_check WHERE tbl_check.check_date IN ( SELECT MAX(tcheck.check_date) FROM tbl_check tcheck GROUP BY tcheck.product_bind_id );
10 กรกฎาคม 2553
คำสั่งที่ใช้ในการเปลี่ยนรูปแบบวันที่ ใน SQL
เมื่อเราเก็บวันที่ในรูปแบบ 10-05-2010 หากเราทำการค้นหา โปรแกรมจะมองเห็นแค่ 2 ตัวแรก
ซึ่งเราต้องทำให้มันอยู่ในรูปแบบของฟอร์แมต เครื่อง คือ 2010-05-10 เสียก่อน ถึงจะทำการค้นหาได้ถูกต้อง
คำสั่งข้างล่างจะทำการเปลี่ยนรูปแบบวันที่ก่อนนำไปค้นหา
จาก text_date_field = 10-05-2010
CONCAT(SUBSTRING(`text_date_field` ,7 ,4) ,'-' ,SUBSTRING(`text_date_field` ,4 ,2) ,'-' ,SUBSTRING(`text_date_field` ,1 ,2))
เมื่อแปลงแล้วจะได้ 2010-05-10
ซึ่งเราต้องทำให้มันอยู่ในรูปแบบของฟอร์แมต เครื่อง คือ 2010-05-10 เสียก่อน ถึงจะทำการค้นหาได้ถูกต้อง
คำสั่งข้างล่างจะทำการเปลี่ยนรูปแบบวันที่ก่อนนำไปค้นหา
จาก text_date_field = 10-05-2010
CONCAT(SUBSTRING(`text_date_field` ,7 ,4) ,'-' ,SUBSTRING(`text_date_field` ,4 ,2) ,'-' ,SUBSTRING(`text_date_field` ,1 ,2))
เมื่อแปลงแล้วจะได้ 2010-05-10
14 มิถุนายน 2553
การเรียงลำดับตัวอักษรในภาษาไทย
หากในฐานข้อมูลคุณเป็นภาษาไทยแล้วอยากเรียงลำดับ ก ข ค ง
สมมุติมีข้อมูล ก ,เข, เก, ข ถ้าหากใช้คำสั่ง ORDER BY ธรรมดามันจะเรียง ก,ข,เก,เข
แต่ถ้าหาำกว่าเราอยากจะเรียงเป็น ก,เก,ข,เข แล้วละก็ ใช้คำสั่งต่อไปนี้ครับ
SELECT * FROM tb_test ORDER BY CONVERT (NAME USING tis620);
เพื่อแปลงเป็น tis620 ก่อนครับ
ข้อมูลจาก บอร์ด thaicreate PHP ครับ
สมมุติมีข้อมูล ก ,เข, เก, ข ถ้าหากใช้คำสั่ง ORDER BY ธรรมดามันจะเรียง ก,ข,เก,เข
แต่ถ้าหาำกว่าเราอยากจะเรียงเป็น ก,เก,ข,เข แล้วละก็ ใช้คำสั่งต่อไปนี้ครับ
SELECT * FROM tb_test ORDER BY CONVERT (NAME USING tis620);
เพื่อแปลงเป็น tis620 ก่อนครับ
ข้อมูลจาก บอร์ด thaicreate PHP ครับ
4 มิถุนายน 2553
บวกค่าชนิด Text ที่มีลูกน้ำคั่น ในคำสั่ง SQL
เมื่อได้ลองทำการบวกค่าที่อยู่ในฐานข้อมูลชนิด Text เช่น 1,000.00 กับค่า 20,000.00
SQL คือ SELECT (num1 + num2) as sumtotal FROM tbl_test
ผลลัพธ์ที่ได้มาคือ 21 ซึ่งมันจะมองเห็นตัวเลขข้างหน้าลูกน้ำ คือ 1 และ 20 มาบวกกันเท่านั้น
วิธีที่ผมใช้แก้ไข คือ
SELECT (REPLACE(num1,',','') + REPLACE(num2,',','')) as sumnew FROM tbl_test
- REPLACE(ค่าที่ต้องการแก้ไข,'ค่าที่ต้องการเปลี่ยน','ค่่าที่นำมาแทนที')
แล้วผลลัพธ์ที่ได้ คือ 21000
แต่ถ้าหาำกค่าที่อยู่ภายในฐานข้อมูลเรามีจุดทศนิยม เช่น 1,000.50 กับค่า 20,000.25
ผลลัพธ์ที่ได้ คือ 21.000.75
ซึ่งคำสั่งนี้จะเหมือนกับ str_replace ใน PHP ครับ
SQL คือ SELECT (num1 + num2) as sumtotal FROM tbl_test
ผลลัพธ์ที่ได้มาคือ 21 ซึ่งมันจะมองเห็นตัวเลขข้างหน้าลูกน้ำ คือ 1 และ 20 มาบวกกันเท่านั้น
วิธีที่ผมใช้แก้ไข คือ
SELECT (REPLACE(num1,',','') + REPLACE(num2,',','')) as sumnew FROM tbl_test
- REPLACE(ค่าที่ต้องการแก้ไข,'ค่าที่ต้องการเปลี่ยน','ค่่าที่นำมาแทนที')
แล้วผลลัพธ์ที่ได้ คือ 21000
แต่ถ้าหาำกค่าที่อยู่ภายในฐานข้อมูลเรามีจุดทศนิยม เช่น 1,000.50 กับค่า 20,000.25
ผลลัพธ์ที่ได้ คือ 21.000.75
ซึ่งคำสั่งนี้จะเหมือนกับ str_replace ใน PHP ครับ
สมัครสมาชิก:
บทความ (Atom)
