บทความนี้ขอเขียนเรื่องเทคนิคเกี่ยวกับ mysql หน่อยนะครับ
เดี๋ยวขอยกตัวอย่างข้อมูลก่อน
| name | score |
|---|---|
| a | 65 |
| b | 45 |
| c | 72 |
| d | 96 |
| e | 54 |
สมมุติว่าผมต้องส่งผลการสอบไปให้กับนักเรียนทุกคน ตัวอย่างดังนี้ครับ
สวัสดี {name},
คะแนนความหล่อของเธอคือ {score}
เธอสอบได้ที่ {rank} จาก ทั้งหมด {all_row} เด้อ
ปัญหาก็คือ mysql ไม่มี row num เหมือนพวก oracle, mssql ทำให้การหา rank ดูยากเย็นขึ้นมาทันที
ลองทำ query กันทีละขั้นตอนเลยนะครับ
- ประกาศตัวแปร row_id
SET @row := 0;
คล้ายๆ pascal เลยอิอิ
- query แสดงข้อมูลโดยเรียงจากคะแนนมากไปหาน้อย และเพิ่มตัวแปร row_id ไปด้วย
SELECT @row:=@row+1 AS `row_id`, `t_score`.* FROM `t_score` ORDER BY `score` ASC
จากตัวอย่างเป็นการเพิ่ม @row ขึ้นทีละ 1 แล้วตั้ง alias เป็น row_id
row_id name score 1 d 96 2 c 72 3 a 65 4 e 54 5 b 45
หุหุแค่นี้ผมก็ได้ row number เอามาส่ง rank คะแนนได้แล้วครับ
« เพิ่ม crontab ด้วย PHP | แจก popup extension สำหรับ dreamweaver »
