Paging : SELECT next page (MySQL)

Posted 2011年1月4日 by

SELECT文で得たレコードを画面に表示したいとき、レコード数が多いとページ繰りします。
このときSELECT文にOracleであればOracleのROW_NUMBER関数を使うことができます。
しかし、MySQLにはOracleのROW_NUMBER関数がありません。

たとえば、次のようなSELECT文があります。


select EMPNO,ENAME,LOC
 from EMP inner join DEPT on EMP.DEPTNO=DEPT.DEPTNO
 order by ENAME


このSELECT文にrow_numberを付けるには次のようなSQL文で可能です。
SELECT文最後のWHERE句でrownum > 4 とすることで、5行目以降を取りだすことができます。


select dummy3.* 
from (select @i:=@i+1 as rownum,dummy2.* 
from (select @i:=0) dummy1,
(select EMPNO,ENAME,LOC 
 from EMP inner join DEPT on EMP.DEPTNO=DEPT.DEPTNO
 order by ENAME) dummy2) dummy3
 where rownum >4


この仕組みを組み込んだ関数が、executeQueryPaging(3,5)です。
引数3と5で、3行目から5行目のレコードを取り出します。


package test
import seedo.database._

object sample04 {
//	val driverName = "oracle.jdbc.driver.OracleDriver"
	val driverName = "com.mysql.jdbc.Driver"
//	val dns = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL"
	val dns = "jdbc:mysql://127.0.0.1:3306/seedo?useUnicode=true&characterEncoding=UTF-8"
	val user ="scott"
	val password ="tiger"
	var dbx:Db = null
	def scala1 :Unit = {
		try {
			dbx = new Db(driverName, dns, user, password)
			dbx.select("empno,ename,loc").from("EMP").innerJoin("DEPT", "EMP.DEPTNO=DEPT.DEPTNO").orderBy("ename")
			println(dbx.toString)
			println(dbx.getSql)
			dbx.executeQueryPaging(3,5).foreach(record => {
	        	record.foreach(col => {
	        		print(" " + col)
	        	})
	        	println
	        })
			println(" --- ColumnNameList")
			dbx.getColumnNameList.foreach(c =>{
				print(" " + c)
			})
			println
		} catch {
			case e:Exception => {println(e.getMessage)}
		} finally {
			dbx.close
		}
	}
  def main(args : Array[String]) : Unit = {
	  scala1
  }
}


結果は次のとおり。

JDBC Driver:MySQL-AB JDBC Driver Version:mysql-connector-java-5.1.13 ( Revision: ${bzr.revision-id} )
Database:MySQL Version:5.5
select empno,ename,loc from EMP inner join DEPT on EMP.DEPTNO=DEPT.DEPTNO order by ename
select empno,ename,loc from EMP inner join DEPT on EMP.DEPTNO=DEPT.DEPTNO order by ename
 3.0 7698 BLAKE CHICAGO
 4.0 7782 CLARK NEW YORK
 5.0 7902 FORD DALLAS
 --- ColumnNameList
 row_num empno ename loc

Post Details

  • Post Title: Paging : SELECT next page (MySQL)
  • Author: admin
  • Filed As: Scala
  • Tags:
  • You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

コメントを残す