• ベストアンサー

CakePHPのfindの取得件数は?

ご存知の方は、お教えください。 CakePHPのfindの取得件数は、どのようにされておりますか? find('count',・・・)ですか? 取得されたデータの配列をcountするのは、間違っていますか? pg_num_rows のように、読み込み時に自動的に設定される変数(?)は無いのでしょうか?

  • besei
  • お礼率74% (80/108)
  • PHP
  • 回答数1
  • ありがとう数1

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

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

Modelの、getNumRowsで、データ件数が取得出来るようです。 実際には、Modelは、データソースっていう別のデータベースへのアダプタを使っていて、そのアダプタがもつ、lastNumRowsを読んでいるだけです。 で、Postgresのドライバを見てみると、(/cake/libs/model/datasources/dbo/dbo_postgres.php) lastNumRowsは、pg_num_rowsを呼んでました。 ですので、恐らく意図した通りの動作をしてくれるものと思います。 ただ、どうせ連装配列になったものを取得しているわけなので、countを使って配列の要素数を数えても同じことかなと思います。 余談ですが、PHP5から標準となったPDOというデータベースアクセス用のクラスでは、 pg_num_rowsのような取得要素数をカウントするメソッドを持ってなかったりします。 第三者が作成した、CakePHP1.3以上用のsqlite3を操作する為のデータソースでは(現状標準ではsqlite3はPDOでしか操作出来ない)、 一度取得したデータ全件をcount関数でカウントして変数に持たせて、lastNumRowsメソッドでソレを取得させるという手法をとってました。

関連するQ&A

  • はてなブックマーク件数取得APIをPHPで使うには

    はてなブックマーク件数取得API http://developer.hatena.ne.jp/ja/documents/bookmark/apis/getcount 上記のページを見て、 http://api.b.st-hatena.com/entry.count?url=[ブックマーク数を取得したいURL] でブックマーク件数が取得できることが分かったのですが、 このブックマーク件数をPHPの変数に入れるには一体どうすればいいのでしょうか。 例えば、変数 $num に int型で指定URLのブックマーク数を入れるようなことがしたいのですが…。

    • ベストアンサー
    • PHP
  • データの件数を取得したいです。

    ACCESSを使って、アドレス帳を作成しています。 指定した条件と一致するデータ件数を求めてMsgboxに表示させようと思い次のようにPGしました。 strSQL = "" strSQL = SELECT COUNT(*) FROM アドレス長 WHERE グループ = 'Screen.ActiveForm.グループ.Value ' MsgBox Count これだと、MsgBoxには何も表示されません。 どのように変更すればいいでしょうか?

  • CakePHP findByについて

    CakePHPを勉強中です。 データベースからのデータ取得が出来ないのでご教授ください。 $test=$this->User->findCount(); の場合、きちんとカウントを取得できているのですが $test=$this->User->find('All'); の場合 何も帰ってこない(empty)になってしまいます。 MySQL 照合順序:utf8_general_ci cakephp-1.2.10 何卒よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • cakephpでのデータ取得について質問です。

    cakephpで質問です。 説明が下手で申し訳ないのですが。 findメソッドでconditionsとorderを指定して特定のIDから5件を取得するにはどうしたらいいでしょうか? アプリとの連携で現在pagenateで5件表示でページングを行っていますが、アプリ側でデータの削除を行うとズレが生じるため、現在取得されているデータの最後のID以降の5件のデータを取得したいと考えています。 何か良い方法などございましたら回答して頂ければと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • SQLite3(PDO)でクエリー件数を取得したい

    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での取得方法がわかりません。 お手数ですが教えて頂ければと思います。よろしくお願い致します。

  • 件数とデータを同時に取得するには?

    1つのSQL文で件数とデータを取得したいのですが無理でしょうか? イメージ図↓ SELECT カラム名,COUNT(*) FROM テーブル名; COUNT  カラム名 -------------------  3     データA       データB       データC

  • レコード取得件数の表示位置について

    PerlでSQL(SELECT)文を発行し、一致した件数を表示させたいと考えております。whileのループ中で演算子のカウントを利用しレコード件数を取得している為、検索結果の表示より下で表示件数を表示しています。一般のWeb表記の場合、whileの前で、何件ヒットしたかを表示させるのが常識だと考えます。 どのようにロジックを変更すれば、良いのでしょうか?件数だけの為にwhileを2回回すのも、恥ずかしいですし(^^; --------------少略-------------------- my @results; my $count; while(@results = $sth->fetchrow) { print @results, "\n<P>"; $count++; } if ($sth->rows == 0) { print "<font color=red>該当するデータはありません</font>"; }else{ print "<font color = red><B> $count 件見つかりました!"; } --------------少略--------------------

    • ベストアンサー
    • Perl
  • CakePHP で、質問させていただきます。CakePHPは、初心者で

    CakePHP で、質問させていただきます。CakePHPは、初心者です。 app/controllers のコントローラ「mobilehellow_controller.php」で、以下のようにデータをセットして、DBにインサートしようとしていますが、何もDBには追加されません。 $saveData = array( "NUM" => $item[$hscan_offset]['kyujin_syokusyu'], "JOBTYPE" => 'kyujin_syokusyu', )); $this->Mobilehellow->create(); $this->Mobilehellow->save($saveData); 画面上には、こんな文字が表示されました。 Query: INSERT INTO "mobilehellows" ("NUM") VALUES ('nextval(''"helloworkmobilep01_NUM_seq"''') DBの構成はこれです。 NUM integer NOT NULL JOBTYPE text エラーも何も出なので、どうしてなのかわかりません。 どうか、ご存知の方お教えください。

    • ベストアンサー
    • PHP
  • PHPの配列をDBのテーブルに入れたいのですが

    完全に行き詰まりそうなので助けていただきたく投稿(投降)します。 PHP内でSQLを走らせた結果を、 $result に入れています。 $rows = pg_num_rows($result); print('レコード数は、'.$rows.'です<br><br>'); // 上記、2行のコードで件数が正しいことは確認しました。 $sabun = array(); $sabun = pg_fetch_all($result); $cnt1 = count($sabun); print('配列sabunのレコード数は'.$cnt1.'です<br><br>'); // 上記、4行のコードで配列に格納された件数が正しいことは確認しました。 // 最初の2行の件数とこの4行の件数は同じ件数です。 // ここで配列sabunのデータをテーブルに入れる /* エラーが出た */ $result = pg_insert( $link,テーブル,$sabun ); /* エラーが出た */ $result = pg_insert( $link,テーブル,$result ); /* エラーが出た */ $result = pg_copy_from( $link,テーブル, $sabun ); /* エラーが出た */ $result = pg_copy_from( $link,テーブル, $result ); // 上記、4種類のコードを試したのですが、全てエラーが出ました(泣) if (!$result) { print('テーブルへの登録が失敗!<br><br>'.pg_last_error()); $err_flg = 1; goto ENDCLR; } 「テーブルへの登録が失敗!」以外のエラーメッセージ等は 表示されませんでした。 エラーが出た4種類のいづれかでうまく行くと思ったのですが、 全滅してしまい途方に暮れています。 根本的にPHPへの理解が足りないのかもしれません。 何か解決の糸口などご教授いただけますと助かります。 どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • ストアドプロシージャ_カーソルのヒット件数

    いつもお世話になっています。 SQLServer7.0です。 ストアドプロシージャでカーソルを使用し、オープンしたカーソルの件数を調べたいのですがうまくいきません。 Declare curs2 cursor for Select [項目名] From [テーブル名] Where [検索条件] Open curs2 Print @@CURSOR_ROWS この「@@CURSOR_ROWS」変数でヒット件数を取得できるように参考書では書いてあるのですが、実際Printしてみると、カーソルをオープンする前だと 0 で、オープンした後だと-1 です。 特にエラーだとか、対象データがないというわけではありません。実際その後ヒットした件数分行う処理は正常に出来ています。 ただ、どうしても処理を行う前に件数を知りたいのです。カーソルの変数だけでは取れないとなると セレクトしたカーソルと全く同じセレクトを実行して@@ROWCOUTで取るしかないかなって思ってるのですが・・・。どうも建設的ではないなって思ってます。 カーソルの件数を取得するにはどうしたらよいのでしょうか?

専門家に質問してみよう