บทความนี้ขอเขียนเรื่องเทคนิคเกี่ยวกับ 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 กันทีละขั้นตอนเลยนะครับ

  1. ประกาศตัวแปร row_id

    SET @row := 0;

    คล้ายๆ pascal เลยอิอิ

  2. 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 คะแนนได้แล้วครับ

This post has No comment. Add your own.