人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MYSQLについて質問です。

現在データベースに入っているデータの中から
あるパラメータに属されているものを50個ずつLIMITで抽出するということをしています。

例)SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 0 , 50
上のSQL文ですときちんと50行表示してくれるのですが

SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 101 , 150
とすると100件近く表示されます。

SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 151 , 200
SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 201 , 251
として50件ずつ上手く抽出したいのですが、どんどん多く抽出されてしまいます。

対処方法を知っているかたおりましたら教えていただければと考えております。
よろしくお願いいたします。

●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:MySQL SELECT SQL いるか データ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● chuken_kenkou
●100ポイント ベストアンサー

LIMIT句の使い方に誤解があるようです。

LIMIT [オフセット値,] 行数

です。

つまり、50行ずつ得たいなら、

先頭から50行・・・LIMIT 0,50

51行目から50行・・・LIMIT 50,50

101行目から50行・・・LIMIT 100,50

151行目から50行・・・LIMIT 150,50

といった指定になります。

◎質問者からの返答

ご回答ありがとうございます。


2 ● ana_log
●20ポイント

SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 101 , 150

SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 50 OFFSET 101

に変更してみてください。

※101行目から50行取り出す

順番が分からないので頭から取り出します。

ちゃんと並び変えた方がいいと思いますが・・・


参考

http://www.postgresql.jp/document/pg732doc/user/queries-limit.ht...

◎質問者からの返答

ご回答ありがとうございます。


3 ● kawasaki
●20ポイント

すでに回答者がおりますのでご不要かもしれませんが、

SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 100, 50

とすれば 101件目?150件目 の50件が取得可能です。

http://dev.mysql.com/doc/refman/5.1/ja/select.html

◎質問者からの返答

ご回答ありがとうございます。


4 ● b-wind
●20ポイント

対処法もなにも使い方間違ってるだけ。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.7 SELECT 構文

その2つの引数のうち、最初の物は返される最初の行のオフセットを指定し、2つめの物は返される行の最高数を指定します。冒頭の行のオフセットは0です。(1ではありません)

第二引数に指定するのは取得する「行数」。つまりこの場合50固定。

SELECT DATA1 FROM TABLE WHERE DATA2 = '1' ORDER BY DATA1 LIMIT 101 , 50;
SELECT DATA1 FROM TABLE WHERE DATA2 = '1' ORDER BY DATA1 LIMIT 151 , 50;
SELECT DATA1 FROM TABLE WHERE DATA2 = '1' ORDER BY DATA1 LIMIT 201 , 50;

order by が抜けているのはすでにコメントで指摘されているとおり。

◎質問者からの返答

ご回答ありがとうございます。


5 ● km1967
●20ポイント

50件ずつ抽出したいなら下記のようにしなければならない。

SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 1, 50;
SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 51, 50;
SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 101, 50;
SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 151, 50;
SELECT DATA1 FROM TABLE WHERE DATA2 = '1' LIMIT 201, 50;
◎質問者からの返答

ご回答ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ