เรื่องมีอยู่ว่า ต้องการจะเขียน SQL สำหรับดึงข้อมูลตาม id ที่รู้อยู่แล้วชุดหนึ่งออกมา
ถ้าเรามีตัวแปร id พวกนั้นอยู่ก่อนแล้ว ก็จะเขียนได้ประมาณนี้
(เขียนด้วยภาษา php นะ)
$id = array(1, 2, 3, 10, 12);
$sql = '
select *
from Products
where id in (' . implode(',', $id) . ')
';
โค้ดธรรมดามาก เอาไปรันก็จะได้ตัวแปร $sql ออกมาประมาณนี้
select *อ้าว! แล้วมันไม่ได้อะไรตรงไหน
from Products
where id in (1, 2, 3, 10, 12)
ก็ผลที่รันออกมาหลังจากเอาไป execute แล้วมันได้ประมาณนี้น่ะสิ
|----|---------|เอ๊ะ ทำไมเลขมันไม่เรียงกันตามที่เราใส่ไปล่ะ?
| id | name |
|----|---------|
| 2 | pencil |
| 10 | books |
| 3 | cup |
| 1 | pen |
| 12 | rubber |
|----|---------|
เพราะว่าการสั่ง where มันไม่ได้เป็นคำสั่ง order by ไงล่ะ คือมันเช็กอย่างเดียวว่าตัวนี้เอามั้ย แต่ไม่เรียงให้นะ ลำดับข้อมูลจะออกมายังไงก็ตามที่ Database มันทำ index เอาไว้ให้ แต่ละครั้งอาจจะออกมาไม่เหมือนกันด้วย
ดังนั้น ถ้าเรารู้ว่า id ที่เราต้องการจะเรียงมีอะไรบ้าง (อาจจะไม่ตามลำดับ มากไปน้อย หรือ น้อยไปมาก ก็ได้นะ) เราก็จะใช้
order by field
เขียนเพิ่มลงไปแบบนี้select *บอกให้เรียงตาม field ที่เรากำหนดเอง ช่องแรกจะใส่ "ชื่อฟิลด์" ลงไป ตามด้วยค่าที่ต้องการจะให้เรียง
from Products
where id in (1, 2, 3, 10, 12)
order by field(id, 1, 2, 3, 10, 12)
พอสำแบบนี้ ค่าที่ Database เรียงออกมาให้ก็จะสวยงามตามลำดับแบบนี้แหละ
|----|---------|
| id | name |
|----|---------|
| 1 | pen |
| 2 | pencil |
| 3 | cup |
| 10 | books |
| 12 | rubber |
|----|---------|
ไม่มีความคิดเห็น:
แสดงความคิดเห็น