hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
SQLele資料集/SELECTする件数を限定 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

SQLele資料集

SELECTする件数を限定する

取得するデータの条件はWHERE節で指定できますが、これだけだと条件に適応するすべてのデータを取得してしまいます。このページではこの取得する件数を指定するための方法を紹介します。
例えばRPGでパーティの所有するアイテムを表示する場合に持っているアイテムすべてのデータをメモリに読み込んでしまうと、場合によっては速度劣化につながります。このページで紹介する方法を使って画面に表示できるデータだけを読み込むようにすれば、これを改善できるでしょう。

なお、最新の情報は本家サイト(英語)にあります。

LIMIT節は取得する件数を指定するためのオプションです。WHERE節やORDER BY節に続けて記述します。

SELECT * FROM table WHERE ... LIMIT (取得する件数)

例えばLIMIT 20とすることで、はじめの20件だけを取り出すことができます。

OFFSETオプション

LIMIT節だけでは「最初のうちの数件」を取得することしかできませんが、オプションを利用することで最初の数件をスキップすることができます。これによって「5番目から10番目まで」といった取出しが可能になります。

SELECT * FROM table WHERE ... LIMIT (取得する件数) OFFSET (スキップする件数)

なおOFFSETはLIMIT節のオプションなので、LIMITと組み合わせずに使うことはできません。

使い方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// HSP3.1 & SQLele1.14 & SQLite3.6.14 で動作確認済み
#include "sqlele.hsp"
#const ITEM_MAX 10
sql_open ":memory:"
 
*create_table
sdim item_names, 32, ITEM_MAX
item_names(0) = "木の剣", "はがねの剣", "勇者の剣","木の盾","はがねの盾","勇者の盾"
item_names(6) = "きず薬","特効薬","万能薬","復活薬"
sql_q "CREATE TABLE ITEMS(item_id INTEGER PRIMARY KEY, item_name TEXT)"
sql_q "BEGIN"
repeat ITEM_MAX
sql_q "INSERT INTO ITEMS(item_name) VALUES('" + item_names(cnt) + "')"
loop
sql_q "COMMIT"
 
*show_all_items
mes "すべてのアイテムを表示します。"
sql_q "SELECT item_id, item_name FROM items ORDER BY item_id"
repeat stat
mes strf("{%2d}:", sql_i("item_id")) + sql_v( "item_name" )
sql_next
loop
 
*show_limited_items
mes "すべてのアイテムのうち、4番目から5つだけを表示します。"
sql_q "SELECT item_id, item_name FROM items ORDER BY item_id LIMIT 5 OFFSET 3"
repeat stat
mes strf("{%2d}:", sql_i("item_id")) + sql_v( "item_name" )
sql_next
loop
 
sql_close
stop
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2009-06-28 (日) 23:35:28 (1623d)