3

sqlステートメントから単一行の結果(たとえば、テーブル/配列の形式)を取得するにはどうすればよいですか?Lua Sqlite(LuaSQLite3)を使用します。たとえば、これは次のとおりです。

SELECT * FROM sqlite_master WHERE name ='myTable';

これまでのところ私は注意します:

  • 「nrows」/「rows」を使用すると、イテレータが返されます
  • 「exec」を使用すると、結果が返らないようです(?)

具体的な質問は次のとおりです。

Q1-単一の行(たとえば最初の行)の結果を取り戻すにはどうすればよいですか?

Q2-行数を取得するにはどうすればよいですか?(例:num_rows_returned = db:XXXX(sql))

4

4 に答える 4

3

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

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

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

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

編集:ああ、ごめんなさい。動作するはずのいくつかの方法があります。

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

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

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

rows = db:nrows("SELECT COUNT(`id`) AS count FROM `table`")
row = rows[1]
print(row.count)
于 2012-04-27T00:50:43.197 に答える
2

rowsまたは使用する関数から取得するイテレータをループするだけです。最後にaを付けることを除いて、break1回だけ繰り返します。

カウントを取得するには、SQLを使用する必要があります。SELECTステートメントで計算します。

SELECT count(*) FROM ...

これにより、クエリの行数という1つの値を含む1つの行が返されます。

于 2012-04-27T00:49:09.117 に答える
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
> 
于 2012-04-28T17:53:54.390 に答える
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"
于 2014-11-25T11:51:35.213 に答える