2012-04-27 3 views
3

SQL文から1行の結果(例えばテーブル/配列の形式)を取得するにはどうすればよいですか? Lua Sqlite(LuaSQLite3)の使用たとえば、この1:sqlite - 1行の結果を戻すにはどうしたらいいですか? (luaSQLite3)

SELECT * FROM sqlite_master WHERE name ='myTable'; 

は、これまでのところ私は注意してください。

  • は「NROWS」/「行」を使用して、与えていないようです「実行」を使用してバック
  • をイテレータを提供しますバック結果

具体的な質問が続いている(?):

Q1 - 単一の行を取得するにはどのように(最初の行を言う)resul背中?

Q2 - 行数の取得方法は? (例:num_rows_returned = db:XXXX(sql))

+0

「最初の行」とは何ですか? SQLテーブル内の行は順序付けされていないので、どのように定義しますか? –

+0

ただ1つの結果が必要な場合は、LIMITを使うことができます。1.これはorderbyを使う方が良いか、任意のレコードを得るでしょう。 –

+0

@NicolBolas - 実際に行があるかどうかをテストしたいので、単一の行を取得する方法を尋ねるでしょう。しかし、行があるかどうかを簡単に伝えることができるものはどれも良いでしょう。 – Greg

答えて

2

が返され、カウントを得るためのデモです:

> require "lsqlite3" 
> db = sqlite3.open":memory:" 
> db:exec "create table foo (x,y,z);" 
> for x in db:urows "select count(*) from foo" do print(x) end 
0 
> db:exec "insert into foo values (10,11,12);" 
> for x in db:urows "select count(*) from foo" do print(x) end 
1 
> 
2

rowsから取得したイテレーターまたは使用している機能のいずれかをループするだけです。あなたは最後にbreakを置くことを除いて、一度だけ繰り返します。

ここでは、SQLを使用する方法について説明します。

SELECT count(*) FROM ... 

これは、1つの値を含む1つの行、つまりクエリの行数を返します。

+0

ありがとうございました。ここでの問題はLua Sqliteの変数にこれを返す方法がわかりません。すなわちそれをルア(Lua)番号として返す。 luasqlite docoはhttp://luasqlite.luaforge.net/lsqlite3.htmlにあります。 – Greg

+0

ドキュメントは新しいサイトhttp://lua.sqlite.org/index.cgi/doc/tip/doc/lsqlite3.wikiにもあります –

+0

これは実際に私のために働いた唯一のものです。 – Richard

3

1行を取得するには、db:first_rowメソッドを使用します。そのようです。

row = db:first_row("SELECT `id` FROM `table`") 
print(row.id) 

行数を取得するには、SQL COUNTステートメントを使用します。そのようです。

row = db:first_row("SELECT COUNT(`id`) AS count FROM `table`") 
print(row.count) 

EDIT:ああ、そのため申し訳ありません。ここにいくつかの方法があります。

db:nrowsを使用することもできます。そのようです。

これを変更して行数を取得することもできます。ここで

rows = db:nrows("SELECT COUNT(`id`) AS count FROM `table`") 
row = rows[1] 
print(row.count) 
+1

これは完璧ですが、LuaSQLite3ではこれは利用できないようです:(私はhttp://luasqlite.luaforge.net/lsqlite3.htmlを見ています – Greg

+1

すべての例は動作しません。 –

1

これは私が私のプロジェクトで使用しているものと同様であると私に適しています。

local query = "SELECT content FROM playerData WHERE name = 'myTable' LIMIT 1" 

local queryResultTable = {} 

local queryFunction = function(userData, numberOfColumns, columnValues, columnTitles) 

    for i = 1, numberOfColumns do 

     queryResultTable[columnTitles[i]] = columnValues[i] 

    end 

end 

db:exec(query, queryFunction) 

for k,v in pairs(queryResultTable) do 

    print(k,v) 

end 

値を連結して、汎用メソッド/関数内に配置することもできます。

local query = "SELECT * FROM ZQuestionTable WHERE ConceptNumber = "..conceptNumber.." AND QuestionNumber = "..questionNumber.." LIMIT 1" 
関連する問題