質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

10696閲覧

[mysql] Limitで指定し件数+ トータル数を同時に出力することは可能なのか?

xjaPANDA

総合スコア124

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/02/17 14:55

mysqlについての質問ですが、例えば、下記のように、smapleテーブルから、条件にマッチした、titleを5件取り出したいと思いますが、それと同時に、条件にマッチしたレコードのトータル数も取得したいのですが、可能でしょうか? 又は、やはり、もう一つトータルをカウントするクエリを書くしかないのでしょうか? もし分かりましたら、よろしくお願いします。

$stmt->rowCount();でカウントしたら出力できるかも~と思ったのですけど、limit で指定しているので、あたりまえですが、5件だけしか出力できませんでした。

try{ $sql = sprintf('SELECT title FROM smaple WHERE id= :id %LIMIT 0, 5', $this->users); $stmt = $this->db->prepare($sql); $stmt->bindValue(':id', $id); $stmt->execute(); $m_data['info'] = $stmt->fetchAll(); $m_data['count'] = $stmt->rowCount(); }catch(PDOException $e){ die($e->getMessage()); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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 00:17

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xjaPANDA

2017/02/18 02:17

ありがとうございます。こんな方法があったとは知りませんでした。とても勉強になりました。感謝します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問