2016-04-04 12 views
0

SQLiteの1つの列から値を取得するにはどうすればよいですか? 例、私はhouseNamesという名前の列を持ち、3行目から値を取得したいのですが、どうすればいいですか?SQLiteとLua:特定の行から列データを選択

+0

'dbQuery'の呼び出しで' i'が使用されているのは何ですか?あなたはSQLクエリの助けを求めていますか?またはluaコードで?または両方? –

+0

'i'は値を取得したい行の値です。完全に動作します。 – Miika822

+0

'dbQuery'とは何ですか?そのSQLクエリは引数を使用しておらず、 'getFreeID'というSQL関数を呼び出すように見えるので、ここで何か根本的なことを忘れていなければ戻りません。 –

答えて

0

あなたの編集後の主な目的は何ですか? しかし、あなたはlua用のsqlite3ラッパーを検索しようとしているようです。 私の経験では、lsqlite3があなたのニーズに合っています。

は、あなたの質問に関しては、このライブラリの主な用途は、イテレータを使用して行われる:

local sqlite3 = require("lsqlite3") 

local db = sqlite3.open_memory() 

for row in db:nrows("SELECT * FROM test") do 
    print(row.id, row.content) 
end 

ので、あなたも、列数よりも便利である列名によってあなたが望む任意の詳細を取得することができます。

あなたが行うことができますデシベルからn番目の行を取得するには:

local sqlite3 = require("lsqlite3") 

local db = sqlite3.open_memory() 
local stmt = db:prepare("SELECT * FROM Players") 
local maxRowNumber = 6 
for rowNumber=1, maxRowNumber do 
    stmt:step() 
    row = stmt:get_named_values() 
end 

があるとして、このコードを取るいけない、IVEは単純な例を書いて、あなたはapi of lsqlite3最初に読み、sqlite3のリターンをチェックする必要があります各機能からのコード。

0

SQLiteを使用して特定の行を直接抽出する方法もあります。 3行目が何を意味するかを決める方法は明らかです。

注:データベース内の行には、(理論上は)少なくとも行内の順序はなく、行が追加されたとしてもORDER BY句が指定されていない限り、SELECT-ed行が期待どおりの順序で返される保証はありません。

必要な行を取得するためにLIMIT節を2回使用できます。その内部にサブクエリを持つクエリが必要です。

サブクエリでは、探している行番号(例:3)に結果が制限されます。外側のクエリでは、ソート1

例とは逆の方向とLIMITに:

-- assumes lsqlite3 already loaded as sqlite3 

db = sqlite3.open(':memory:') 

sql = [[ 
create table t(houseNames text); 

insert into t values('a'),('b'),('c'),('d'),('e'),('f'); 
]] 

db:exec(sql) 

sql = [[ 
select houseNames from (select houseNames from t order by houseNames limit 3) 
    order by houseNames desc 
    limit 1; 
]] 

for house_name in db:urows(sql) do 
    print(house_name) 
end 

db:close() 

また、OFFSET句とLIMITを使用してサブクエリを避けることができます。

sql = [[ 
select houseNames from t order by houseNames limit 1 offset 2 
]] 
関連する問題