LoginSignup
0
0

More than 5 years have passed since last update.

havingを使ってデータ数を抽出するシンプルな方法とは?

Last updated at Posted at 2018-11-12

現在phpでwebサービスを開発している際にmysqlのDB関連で躓いたのでアウトプットさせていただきます。

データベース関連でSELECTしたデータ数を数えたいときにはcountで取得してくると思うがうまくいかないパターンが2種類ありました。

1.GROUP BY でデータをまとめたとき
2.GROUP BY でデータをまとめ、かつHAVINGで制限したとき

1の場合についてはcount関数を使うとGROUP BYでデータをまとめたものの数をとってきてしまうためcount(distinct カラム名)を使うことでうまくいきました。(これについてはリファレンスを参照してください)

問題は2の場合についてです。

$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

GROUP BY を使ってHAVINGを用いた際はcount(distinct カラム名)ではうまく取得できませんでした。
そこで$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true)と$count = $stmt->rowCount();を使う
先に言うと私も詳しくはわかっていませんのでご了承ください!
イメージでは一度BUFFEREDにデータをためておいてrowCount関数で引っ張ってくるというイメージです
コードをご紹介します
1542028135997.jpg

関数名等は気にしないでください。
またhaving等は使っていない簡単な例を挙げています。

コードのように5行目のコードを書きexecuteした後にrowCountを使うことでデータ数を取得することができます。

もしcountでどうしてもデータ数が取得できないときは試してみてください!

一つ注意点としては、ページング処理等を行う関係でlimitを使ってデータ数をSELECTしてくるときは全データ数をとってくることはできません
その際は、1.データをとってくる関数と、2.データ数をとってくる関数を二つ呼び出す必要が出てくると思います

以上です。
少しでもお役に立てれば幸いです。

何か間違っている部分等御座いましたら、ご意見よろしくお願いします!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0