
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ベストアンサー
- 回答日時:
ご質問のコードは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;
ありがとうございます。
示して頂いたコードではどうもエラーが出るのでいろいろ調べておりました。
そこで以下のようにしたら取得できるような感じでした。
$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でも確認できました。
アドバイス頂いて方向性がわかりましたので助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- PHP PHPSpreadsheetによる書き出し時のページネーション方法について 1 2023/03/20 10:35
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
エラー 1068 (42000): 複数の主...
-
selectした大量データをinsert...
-
select文のwhere句に配列を入れ...
-
期間の重複を調べるSQL文につい...
-
バインド変数について
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
[MySQL] 3つのテーブルの結合で...
-
WordpressのContact form 7でzi...
-
inner joinをすると数がおかし...
-
sqlで、600行あるテーブルを100...
-
最小値をUPDATE
-
上位3位を求めるSQL文は?
-
ローカルルーターモードとは
-
updateを1行ずつ実行したい。
-
Postgreのupdateコマンドでエラー
-
ある条件の最大値+1を初番する...
-
少し前に放送されていたオムツ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
sqlで、600行あるテーブルを100...
-
select文のwhere句に配列を入れ...
-
SQLにて特定の文字を除いた検索...
-
WordpressのContact form 7でzi...
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
クエリ表示と、ADOで抽出したレ...
-
マイクラPC版のコマンドで効率...
-
【Transact-sql】 execの結果を...
-
SQL Left Join で重複を排除す...
-
エラー 1068 (42000): 複数の主...
-
[MySQL] UNIQUE制約の値を更新...
-
inner joinをすると数がおかし...
-
1テーブル&複数レコードの更新...
-
Access パラメータクエリをcsv...
-
期間の重複を調べるSQL文につい...
-
Unionした最後にGROUP BYを追加...
-
Updateの複数テーブル条件時のL...
おすすめ情報