- ベストアンサー
取得するデータの件数指定、MySQLではlimit、ORACLEでは?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 ソート順を気にしなくていい(取ってきた順番)なら、 SELECT * FROM (SELECT *, ROWNUM AS XX FROM user_tbl) WHERE XX >= 11 AND XX <= 20 でできます。 全体を何かのソート順で取得する場合、ROW_NUMBER()を使用するのが普通です。 (ROWNUMの方が処理は早いが、ORDER BYより先に評価されてしまう・・・) 参考まで・・・。 (^^ゞ
その他の回答 (1)
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 SELECT * FROM user_tbl WHERE ROWNUM <= 10 こんなんでいいのかな? (^^ゞ
補足
どうもありがとうございます! もうひとつ言い忘れました・・・。 11~20件を取得するにはどうすればいいでしょうか? 教えてください(^^
関連するQ&A
- SELECTでの指定行からの指定行数文の取得
こんにちは。 OracleでSELECT文、一発で指定行から指定行数分のデータを取得するように指定できるのでしょうか? 例) SELECT * from tbl01; で、100行取得できる状態で25行目から30行分取得する OracleのSQLリファレンスを調べたのですが該当するようなものは 見当たりませんでした。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- MySQLのLIMITで指定通りに取得できない原因
PHPとMySQLについて勉強しています。 ページ制御で各ページのボタンを押すと、 MySQLのLIMITで何番目~何番目のデータを取得して 表示させるものを作ってみたいと思っています。 作ったコードはこちらにあります。 PHP https://box.yahoo.co.jp/guest/viewer?sid=box-l-co4ivitvpdo32iqddqwd3piwfi-1001&uniqid=f76637ed-5a9b-4eff-8b84-b4c74045a0e6&viewtype=detail MySQL https://box.yahoo.co.jp/guest/viewer?sid=box-l-co4ivitvpdo32iqddqwd3piwfi-1001&uniqid=fdeb7fdb-3969-4a60-bbdc-3142d0982c9e&viewtype=detail $mysql_Code_Limit = $mysql_Code." LIMIT ".$limit_start.",".$limit_end; でecho $mysql_Code_Limit;とすると SELECT * FROM infotable LIMIT 0,2 や SELECT * FROM infotable LIMIT 12,14や SELECT * FROM infotable LIMIT 24,26 など ちゃんと思い通りになっているのですが、 実際に表示される内容は、 1ページ目:id1~id2:2行分取得 2ページ目:id4~id8:5行分取得 3ページ目:id7~id14:8行分取得 4ページ目:id10~id20:11行分取得 5ページ目:id13~id26:14行分取得 6ページ目:id16~id30:15行分取得 7ページ目:id19~id30:12行分取得 8ページ目:id22~id30:9行分取得 9ページ目:id25~id30:6行分取得 10ページ目:id28~id30:3行分取得 といったようにおかしくなります。 上記の特徴は、SELECT ~ Limit A , B;だとすると Aは3ずつ増加 Bは3+3増加 といった状態です。 なぜこのようなことになってしまうのでしょうか。
- ベストアンサー
- PHP
- MySqlでのデータソートについて
MySqlバージョン:5.1.61で、下記のSQLを実行すると、 1件しかデータが無いにも関わらず、EXPLAINの結果で 「Extra: Using where; Using filesort」が発生します。 ---------------- CREATE TABLE IF NOT EXISTS tbl ( user int(11) NOT NULL, item int(11) NOT NULL, prm1 int(11) NOT NULL, prm2 int(11) NOT NULL, prm3 int(11) NOT NULL, PRIMARY KEY (user,item) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO tbl (user,item,prm1,prm2,prm3) VALUES (1,1,10,10,10); EXPLAIN SELECT * FROM tbl WHERE user=1 ORDER BY prm1; EXPLAIN SELECT * FROM tbl WHERE user=1 ORDER BY prm2; EXPLAIN SELECT * FROM tbl WHERE user=1 ORDER BY prm3; ---------------- ORDER BY句で使用する項目(prm[n])は10項目以上になりますので 10件を超える複合インデックスを張る事は避けたいと考えております。 また、tbl全体のデータは1億件、1userあたり100~200件を想定しています。 複合インデックスを使用せず「Using filesort」を 発生させなくする事はできるのでしょうか?
- ベストアンサー
- MySQL
- SQL鯖2000でROWNUM関数
SQL鯖2000を使用しております。 Oracle感覚で以下のSQL文を実行しようとしたところ、 select rownum 行番, tbl.* from tbl エラーが出ます。 実現可能かどうか、あるいは原因と対策を知りたいです。 お願いいたします。
- ベストアンサー
- その他(データベース)
- オラクルDBからのデータ取得について
こんばんわ。 オラクル(sqlplus)についての質問2点です。 (1)シェルからオラクルDBへアクセスし、データを取得したいのですが、 select時に、結果のヘッダーをつけずに結果(データ)のみをファイル出力することは可能でしょうか? (DB2で言うところの「-x」オプションのような・・・) (2)エラー時にSQLコードを取得したいのですが、SQLコードをファイル出力することは可能でしょうか? オラクルは初心者で、行き詰まってしまいました・・・ どうかよろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- 得られたカラムを利用して複数行を1文で取得したい
MySQLバージョン4.1.16を使用しています。 テーブル「tbl1」のnoが2が保有しているuser_id(この場合はaaaa) の行を1つのSQL文で取得したいのですが、どのようなSQL文なるでしょうか? 例えばこの場合は1,2,4行目が取得できるようにしたいです。 また、PHPなどを利用して記述する場合に、 一旦、 select * from tbl1 where no = '2'; で得られたuser_id(aaaa)を変数に保存しておき、 それを利用してもう一度 select * from tbl1 where user_id = '{上のSQL文で得られた変数(中身はaaaa)}'; と二度記述してもできるのでしょうが、 初めの1つのSQL文で取得する場合と、2つのSQL文わけて取得する場合とでは 件数が多くなっていった時にどちらが早い遅いというのはあるのでしょうか? テーブル「tbl1」 +----------+---------+ | user_id | no | +----------+---------+ | aaaa | 1 | +----------+---------+ | aaaa | 2 | +----------+---------+ | bbbb | 3 | +----------+---------+ | aaaa | 4 | +----------+---------+
- ベストアンサー
- MySQL
- MYSQLとPHPによって取得する多次元配列
はじめてご質問させていただきます。 現在以下のようなテーブルが3つあります。 [ tbl1 ] | tbl1Key | title | | 1 | a | | 2 | b | | 3 | c | | 4 | d | [tbl2] | tbl2Key | tbl1Key | tbl3Key | | 1 | 2 | 2 | | 2 | 3 | 1 | | 3 | 3 | 4 | | 4 | 1 | 3 | [tbl3] | tbl3Key | value | | 1 | aaa | | 2 | bbb | | 3 | ccc | | 4 | ddd | 上記のデータソースを元に以下のような結果を得たいと考えています。 array( array( 'tbl1Key'=>1, 'title'=>'a', 'values' => array( array( 'tbl3Key'=>3, value='ccc' ) ), array( 'tbl1Key'=>2, 'title'=>'b', 'values' => array( array( 'tbl3Key'=>2, value='bbb' ) ), array( 'tbl1Key'=>3, 'title'=>'c', 'values' => array( array( 'tbl3Key'=>1, value='aaa'), array( 'tbl3Key'=>4, value='ddd' ) ), array( 'tbl1Key'=>4, 'title'=>'d', 'values' = > array( array( 'tbl3Key'=> , value='' ) ) ) この場合phpによって $sql = ("select * from `tbl1`"); $res = mysql_query( $sql, $con ); $data = array(); while( $row =mysql_fetch_object( $res ) ) { $sql = ("select * from `tbl3` inner join `tbl2` on `tbl3`.`tbl3Key`=`tbl2`.`tbl3Key` where `tbl2`.`tbl1Key`={$row->tbl1Key}"); $res2 = mysql_query( $sql, $con ); $tmp = array(); while( $r = mysql_fetch_object( $res2 ) ) { $tmp[] = $r->value; } $row->values = $tmp; $data = $row; } まずtbl1のデータをすべて取り、配列dataに格納する段階で、tbl1と関連付けされたtbl3のvalueを取得し配列tblに格納、それを新しい要素として配列dataにプッシュしている状況です。 こういったテーブルでいうところの1カラムのみ配列で返すような事は、こういったループを使って以外にも可能なのでしょうか。 よろしくお願いいたします。
- 締切済み
- PHP
- 件数とデータを同時に取得するには?
1つのSQL文で件数とデータを取得したいのですが無理でしょうか? イメージ図↓ SELECT カラム名,COUNT(*) FROM テーブル名; COUNT カラム名 ------------------- 3 データA データB データC
- ベストアンサー
- Oracle
- oracle9i 日付データに関して
お世話になっております。 Oracle9i(9.0.1.0.1) Linux RedHat7.3J JDBC 接続でOracle Type4 ドライバを使用しています。 本日の日付は2003/09/10で、sysdateも2003/09/10です。 この環境で、以下のSQL文を発行すると、 0件が返ってきます。 select count(*) from dual where '20030910' >= sysdate 以下の条件だと1件返ってきます。 select count(*) from dual where '20030911' >= sysdate さらに、sysdateにフォーマットを指定すると select count(*) from dual where '20030910' >= to_char(sysdate,'yyyymmdd') 1件返ってきます。 質問は、sysdateにto_charのフォーマットを指定した場合と 指定しなかった場合との違いについて教えていただきたいのと、 その違いが明文化されているサイトやotnドキュメントが ありましたら教えていただきたいのです。 otnドキュメントの日付データのところを読んだのですが 詳しい事はわかりませんでした。 宜しくお願いいたします。
- ベストアンサー
- その他(データベース)
お礼
どうもありがとうございました~(^^