• ベストアンサー
  • すぐに回答を!

SQLite3(PDO)でクエリー件数を取得したい

  • 質問No.7847881
  • 閲覧数1026
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 76% (2013/2633)

SQLite3をPHPで使用しています。
ネットでいろいろ見たのですがわかりませんでしたのでこちらで質問させて頂きました。

SELECTで条件に合うidを抽出した場合にその行数を取得したいのですが、どのようにするとスマートに取得できるのでしょうか?
スマートにというのは「データベースへのアクセスが一度で済むような」という意味です。抽出データの取得と件数の取得が一度のアクセスで可能なのでしょうか?

$pdo = new PDO(sqlite:test.db);
$query = $pdo->prepare('SELECT id FROM testTable WHERE id > 0 AND id < 10');
$query->execute();

私が現在行なっているのは、データ抽出は上記のコードでやって、件数の取得は以下のようにしています。

$query = $pdo->prepare('SELECT count(*) FROM testTable WHERE id > 0 AND id < 10');
$query->execute();
$num = $query->fetch(PDO::FETCH_NUM);
echo $num[0];

ネットで調べてもMySQLやPostgreSQLのことしか載っていなく、なかなかSQLite3での取得方法がわかりません。
お手数ですが教えて頂ければと思います。よろしくお願い致します。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 69% (99/142)

ご質問のコードは1行目の第0番目のデータを表示させていますが、select命令の取得フィールドを2つとも指定するようにできます。
そして、fetch を fetch_assocに変えて、count(*)に別名kosuを与えて、連想配列で$num->idと呼び出すようにできます。
ただし、このようにしてデータ件数分だけ繰り返したとして、count()関数をその度に繰り返すでしょうから時間的ロスは出るので、別々にするのが効率的と思われます。
また、PDOを活用するとしたら、基本的なSQLの操作方法は共通ですから、SQLの文法と繰り返し取得とフィールドの分割が分かれば、SQLの違いに関わらす自由に操作できます。

$pdo = new PDO(sqlite:test.db);
$query = $pdo->prepare('SELECT id, count(*) AS kosu FROM testTable WHERE id > 0 AND id < 10');
$query->execute();
$num = $query->fetch_assoc(PDO::FETCH_NUM);
// id,kazuを指定して
echo $num->id;
echo $num->kazu;
お礼コメント
suffre

お礼率 76% (2013/2633)

ありがとうございます。
示して頂いたコードではどうもエラーが出るのでいろいろ調べておりました。
そこで以下のようにしたら取得できるような感じでした。

$pdo = new PDO(sqlite:test.db);
$query = $pdo->prepare('SELECT id, count(*) AS kosu FROM testTable WHERE id > 0 AND id < 5');
$query->execute();
$queryArray = $query->fetchALL(PDO::FETCH_ASSOC);
print_r($queryArray);

出力結果
Array ( [0] => Array ( [id] => 1 [id] => 2 [id] => 3 [id] => 4 [kazu] => 4 ) )

他の方法として、取得した配列をsizeofでも確認できました。
アドバイス頂いて方向性がわかりましたので助かりました。
投稿日時:2012/12/16 21:41
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ