如何用CodeIgniter编写含子查询的SELECT语句计算密集排名及转换指定SQL
CodeIgniter实现带密集排名子查询的SELECT语句
下面提供两种将指定原生SQL转换为CodeIgniter查询语句的方式:
使用Query Builder构造
Query Builder是CodeIgniter推荐的查询方式,会自动处理数据转义,提升安全性:
$this->db->select('1 + (SELECT count(*) FROM student_rank a WHERE a.obtained_total_mark > b.obtained_total_mark) AS rank'); $this->db->from('student_rank b'); $this->db->where('student_id', '5'); $this->db->order_by('rank'); $this->db->limit(1); // 获取排名结果 $rank_result = $this->db->get()->row(); $student_rank = $rank_result->rank;
直接执行原生SQL
如果查询逻辑复杂,直接执行原生SQL会更直观:
$native_sql = "SELECT 1 + ( SELECT count( * ) FROM student_rank a WHERE a.obtained_total_mark > b.obtained_total_mark ) AS rank FROM student_rank b WHERE student_id = '5' ORDER BY rank LIMIT 1"; // 执行并获取结果 $rank_result = $this->db->query($native_sql)->row(); $student_rank = $rank_result->rank;
两种方式最终都会返回student_id为5的学生的密集排名结果。
内容的提问来源于stack exchange,提问作者Chhupendra Sharma
相关产品推荐
相关产品推荐

