- 2009-08-21 (金) 11:30
- CUSTOMIZED | WordPress
原因は『SELECT FOUND_ROWS()』
『SELECT FOUND_ROWS()』は
MySQLなら直前に実行したSQLの件数を返してくれる。
SQLiteにはない。
対処するために直前のSQLを保持しておいてカウントするように書き換えた。
対処法
/wp-content/pdo/db.phpを書き換える
function query($query)
直後に下記を追加。
if( strtolower(mb_substr(str_replace(" ","",$query),0,6)) == "select" )
{
if($query == "SELECT FOUND_ROWS()"){
$nowquery = $query;
$query = $this->beforequery;
$query = preg_replace("/(SELECT .* FROM)/i", "SELECT COUNT(*) FROM" , $query);
$query = preg_replace("/((GROUP BY|ORDER BY|LIMIT ).*)/i", "" , $query);
}else{
$this->beforequery = str_replace("SQL_CALC_FOUND_ROWS"," ",$query);
}
}
selectのときだけ処理するようにしている。
日付から記事取得するための修正とセットで修正が必要。
はい、結構な力技。
因みに
SQLでcount(*)とかに直してない場合、勝手に2ページと判断して何故かページが出るようになるが、最大も最小もなく2ページだから正しくはない。
更新@2009.11.21
更新@2010.11.15 16:05
更新@2011.01.02 23:49
関連する投稿
- Newer: Pタグを保持した改行追加プラグイン
- Older: Linuxを勉強したい
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://qooga.jb-jk.net/wp/2009/08/wp_sqlite_select_found_rows/trackback/
- Listed below are links to weblogs that reference
- http://qooga.jb-jk.net/wp[wp×SQLite]ページ送り『SELECT FOUND_ROWS()』対応 from MOT:主にプログラム勉強メモ部屋