SQL_CALC_FOUND_ROWSオプション および FOUND_ROWS()関数を使用すれば、可能です。
https://dev.mysql.com/doc/refman/5.6/ja/information-functions.html#function_found-rows
サーバーからクライアントに返される行の数を制限するために、SELECT ステートメントに LIMIT 句が含まれている場合があります。場合によっては、ステートメントを再度実行せずに、LIMIT を付けなかった場合にステートメントで返されるはずの行数を知っておくことが望ましいことがあります。この行数を取得するには、SELECT ステートメントに SQL_CALC_FOUND_ROWS オプションを付けてから、FOUND_ROWS() を呼び出します。
sql
1mysql> SELECT * FROM sample;
2+----+--------------------+-----------------+
3| id | title | author |
4+----+--------------------+-----------------+
5| 1 | 剣客商売 | 池波正太郎 |
6| 2 | 鬼平犯科帳 | 池波正太郎 |
7| 3 | 真田太平記 | 池波正太郎 |
8| 4 | 戦国幻想曲 | 池波正太郎 |
9| 5 | 忍者丹波大介 | 池波正太郎 |
10| 6 | 火の国の城 | 池波正太郎 |
11| 7 | 蝶の戦記 | 池波正太郎 |
12| 8 | 剣の天地 | 池波正太郎 |
13| 9 | 黒幕 | 池波正太郎 |
14| 10 | 雲霧仁左衛門 | 池波正太郎 |
15| 11 | 龍馬がゆく | 司馬遼太郎 |
16| 12 | 燃えよ剣 | 司馬遼太郎 |
17| 13 | 坂の上の雲 | 司馬遼太郎 |
18| 14 | 国盗り物語 | 司馬遼太郎 |
19| 15 | 城塞 | 司馬遼太郎 |
20| 16 | 太閤記 | 司馬遼太郎 |
21+----+--------------------+-----------------+
2216 rows in set (0.00 sec)
php
1<?php
2
3$hoge = new Hoge();
4$hoge->doSomething('池波正太郎');
5
6class Hoge {
7
8 private $db = null;
9
10 public function __construct() {
11 $this->db = new PDO("mysql:host=localhost", 'XXXXX', 'XXXXX');
12 $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
13 }
14
15 public function doSomething($author) {
16 try{
17 $sql = 'SELECT SQL_CALC_FOUND_ROWS title FROM sample WHERE author = :author LIMIT 0, 5';
18 $stmt = $this->db->prepare($sql);
19 $stmt->bindValue(':author', $author);
20 $stmt->execute();
21 $m_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
22
23 $stmt = $this->db->query('SELECT FOUND_ROWS()');
24 $count = $stmt->fetch(PDO::FETCH_ASSOC);
25 $stmt->closeCursor();
26
27 var_dump($m_data);
28 var_dump($count);
29
30 }catch(PDOException $e){
31 die($e->getMessage());
32 }
33 }
34}
実行結果
array(5) {
[0]=>
array(1) {
["title"]=>
string(12) "剣客商売"
}
[1]=>
array(1) {
["title"]=>
string(15) "鬼平犯科帳"
}
[2]=>
array(1) {
["title"]=>
string(15) "真田太平記"
}
[3]=>
array(1) {
["title"]=>
string(15) "戦国幻想曲"
}
[4]=>
array(1) {
["title"]=>
string(18) "忍者丹波大介"
}
}
array(1) {
["FOUND_ROWS()"]=>
string(2) "10"
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/18 02:17