• ベストアンサー

SQLiteで特定の順位をもつ項目を検索する方法

SQLiteにおいて、とある一意の数値nが全体のうちの何番目に位置するかどうかは以下のようなクエリで取得できます。 select *,(select count(*)+1 from card as c where c.n < card.n) as idx from card where... 今回は「項目Bに×をもち、かつ順位が○位以上である」や「項目Cに△が含まれる、もしくは順位が○位以下」といったように、順位が条件に含まれるクエリを考えているのですが、これを少ない手順で再現する方法があればお教えください。

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

記載のSQLをインラインビューにすればいいのではないでしょうか。 select * from ( select *,(select count(*)+1 from card as c where c.n < card.n) as idx from card ) where ...; という感じです。 参考までに http://ideone.com/uSQ3fe

Tank2005
質問者

お礼

ご回答ありがとうございました。この例を参考にしてテストを重ねていきたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

  • sqlite_open()なんですが

    PHPで <?php $db=sqlite_open("rensyuu.sqlite",0666,$err); $row=sqlite_query($db,"select count(*) from sqlite_master where name='tb1';"); $kotae=sqlite_fetch_single($row); print($kotae); sqlite_close($db); ?> と打ったものを実行したら、 Warning: sqlite_open() [function.sqlite-open]: file is encrypted or is not a database in.... というエラーになりました。 どうもsqlite3で作ったのが原因っぽいんですがなにか ご存知でしたら教えていただけませんか。

  • SQLiteで日付の取得

    SQLiteのクエリについてお教え頂けませんでしょうか? テーブル名:MyTable 列名:MyDate(TEXT型) MyDateのデータ 20150501102722_XYZ 20150502102722_AVC 20150505102722_BCD データはYYYYMMDDHHMMSS形式 + ランダムなアルファベットになっています。 クエリで201502以上のデータを取得したいと思っています。つまり、 20150502102722_AVC 20150505102722_BCD 上記の2つのデータが欲しいです。 そこで下記のようなSQLを書きました。 SELECT * FROM MyTable WHERE MyDate >= substr(1,8) しかしデータは1件も取得できませんでした。 そこで、試しに下記のようなクエリも書いてみましたが、これもダメでした。 SELECT * FROM MyTable WHERE MyDate = substr(1,8) どのようにすれば、データを取得する事ができるでしょうか?よろしくお願いいたします。

  • SQLiteのLike句で抽出できない

    SQLiteのLike句で抽出できないレコードがあります。 原因についてご教授いただけますでしょうか。 以下、操作手順になります。 ■データベースの作成 C:\>sqlite3.exe member.db SQLite version 3.7.15.2 2013-01-09 11:53:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" ■テーブルの作成、レコードの追加 sqlite> create table t_member(name text, age integer); sqlite> insert into t_member values('山田一郎', 25); sqlite> insert into t_member values('田中次郎', 35); sqlite> insert into t_member values('鈴木三郎', 45); ■検索 sqlite> select * from t_member where name like '%一郎'; 山田一郎|25 sqlite> select * from t_member where name like '%次郎'; 田中次郎|35 sqlite> select * from t_member where name like '%三郎'; sqlite> 三郎だけが検索条件に適合しないのは何故でしょうか。 よろしくお願いします。

  • accessで順位の合計の順位の求め方

    [T_成績]というテーブルの中に    フィールド名:[出席番号]    フィールド名:[得点] というフィールドがあるとします。 まず、新規にクエリーを作ります。これはただの選択クエリーで、[T_成績]テーブルを1個だけ追加します。 クエリーグリッドのフィールド欄に[出席番号]と[得点]を追加します。 最後のフィールドに順位を求める式を入力します。式は以下の通りです。   順位: (select count(*) from T_成績 as T_成績_1 where T_成績_1!得点>T_成績!得点)+1 こうすれば順位が求められるのですが例えば国語と数学と英語の順位の合計の低い順に順番を求めたいのですが(単純に合計の順位ならでるのですが)、順位の合計の順位というものがうまくいきません。本当に困っていますまる3日いろいろ試したのですがうまくいきません。今日も徹夜でした、よろしくお願いします。

  • SQLiteで全文検索はANDできない?

    環境は WindowsXP SP2 Python 2.7, sqlite3 です。 次のSQL文は成功します。 SELECT head, body FROM dic WHERE body MATCH 'foo bar' しかし、次がエラーになります。 SELECT head, body FROM dic WHERE body MATCH 'foo bar' AND head MATCH 'bar' 解決方法はありますか。

  • SQLiteでソートした結果をファイルに反映させたい

    あるソフトのデータがSQLiteの形式だと分かり、SQLiteのソフトで開きました。特定のID以外の項目を: DELETE FROM outbox WHERE user_id <> 7777777; で、消し、 SELECT * FROM outbox ORDER BY date_time; でソートしました。しかし、DELETEの方はファイルに反映されたのに、 SELECTの方は、ファイルに反映されません。 SQLite Database Browserというソフトを使っています。 何も分からない状態からここまで来たのです。 あと少しなので、よろしくお願い致します。

  • phpからsqliteにselect抽出

    phpからsqliteにselect抽出しています。 $sql = "select * from Table where C=?" $st = $db->prepare($sql); $st->bindParam(1, $key, PDO::PARAM_STR); $st->execute(); while ($row = $st->fetch(PDO::FETCH_ASSOC)) { *** *** } でエラーにはなりませんが、データがとれません。 updateやinsertで?(インジェクション)はうまくいくのですが、Selectでなぜ取得できないのでしょうか? bindParamをarrayにしたりprepare をqueryにしたりしましたが、 データが1件しか取れなかったりします。

    • ベストアンサー
    • PHP
  • PHP SQLiteの命令文

    お尋ねします。 [Plan.class.php]で ・・・・・・・・ if($this->db = sqlite_popen($this->DBfile,0440,$sqliteerror)){ $this->qstring= "select place,title,contents from schedule where idno = {$this->idno} and hiduke = '{$this->totodate}'"; $this->qresult = sqlite_query($this->db,$this->qstring); if(0==sqlite_num_rows($this->qresult)){ $this->oplace=""; $this->ocontents=""; $this->button="登録"; }else{ ・・・・・・・・ と書いて実行すると、 Warning: sqlite_query() [function.sqlite-query]: near "and": syntax error in C:\Program Files\Apache Group\*****\Plan.class.php on line 55 ( $this->qresult = sqlite_query($this->db,$this->qstring;の行です。) Warning: sqlite_num_rows() expects parameter 1 to be resource, boolean given in C:\Program Files\Apache Group\*****\Plan.class.php on line 56 ( if(0==sqlite_num_rows($this->qresult)){ の行です。) というエラーが出ます。この文はどこか拙いでしょうか?

    • 締切済み
    • PHP
  • PHP-SQLiteに於いて、複数列の検索方法を教えてください

    SQLiteの複数列の検索 SQLiteの勉強を始めたばかりなのですが、 複数列の検索方法が解らなくて、 色々調べましたが解らなかったので質問させてください。 データベースの中が |ID  |  氏名  |  住所       |  電話番号 |----|-------|--------------|--------------- |1  |山田   |埼玉県******** |03******** |2  |田中   |東京********** |03******** |3  |佐藤   |千葉県******** |090******** |4  |佐々木  |埼玉県******** |090******** ----------------------------------------------------- 期待する動き 例1) 住所:埼玉県 と検索すると 山田,埼玉県********,03******** 佐々木,埼玉県********,090******** と表示される 例2) 名前:山田 住所:埼玉県 と検索すると 山田,埼玉県********,03******** と表示される ※ユーザーからはどの項目を検索対象とされるか解らない。 test.phpの内容 //フォームからID取得 $search_id = $_POST['id']; //フォームから氏名取得 $search_user_name = $_POST['search_user_name']; //フォームから住所取得 $search_home_address = $_POST['search_home_address']; //フォームから電話番号取得 $search_tel_num = $_POST['search_tel_num']; //フォームからの入力データを格納 $chk_data = "$search_id,$search_user_name,$search_home_address,$search_tel_num"; //比較する列名配列変更用カウント変数 $i = 0; //比較する列名 $chk_db_line = array("id", "user_name", "home_address", "tel_num"); //データベース列名格納 $all_data = "id,user_name,home_address,tel_num"; //ユーザーが入力した検索項目をカンマ区切りで配列に格納 foreach($chk_line as $chk_ln){ //ユーザーが入力した検索項目をチェック if( ($chk_ln === "") || ($chk_ln === NULL) ){ //比較する列名配列変更用カウント変数インクルメント $i++; //ユーザーが入力した検索項目をチェックし値が入っている場合 }else{ //sqlite文の$query = WHERE以降を変数に代入 //ユーザーが入力した検索項目の個数は可変のため $sqlite_str .= $chk_db_line[$i]. " LIKE ". "'%". $chk_ln. "%' "; //比較する列名配列変更用カウント変数インクルメント $i++; } } //設定項目がなければ検索しない if(!$sqlite_str){ echo "検索項目が設定されていません。"; //設定項目あれば検索する }else{ //データベースオープン if($db = sqlite_open('./db/Personal_data')){ //検索 $query = "SELECT ".$all_data ." FROM tb1_personal_data WHERE ".$sqlite_str; $result = sqlite_query($db, $query); //検索結果表示 while($info = sqlite_fetch_array($result)){ echo "<tr>"; echo "<td>氏名</td><td align='left'>{$info['user_name']} </td>"; echo "</tr>"; echo "<tr>"; echo "<td>氏名</td><td align='left'>{$info['home_address']} </td>"; echo "</tr>"; echo "<tr>"; echo "<td>氏名</td><td align='left'>{$info['tel_num']} </td>"; echo "</tr>"; } //データベースクローズ sqlite_close($db); } } とすると、単体検索は成功しましたが、複数検索を行うとエラーが表示される 検索フォームから検索 例1) 住所:埼玉県 と検索すると 山田,埼玉県********,03******** 佐々木,埼玉県********,090******** と表示される 成功 例2) 名前:山田 住所:埼玉県 と検索すると Warning: sqlite_query() [function.sqlite-query]: near "home_address": syntax error in Warning: sqlite_fetch_array() expects parameter 1 to be resource, boolean given in とエラー表示が出ます。 そもそも考え違いをしていたらすいません。 どなたかよろしくお願いします。

    • ベストアンサー
    • PHP