0

コードを実行すると:

row = db:first_row("SELECT MIN(rowid) from table")
local minID = row.rowid

row = db:first_row("SELECT MAX(rowid) from table")
local maxID = row.rowid

次のようなエラーが表示されます。

Runtime error: ...\db_test\main.lua:33: attempt to call method 'first_row' (a nil value)
stack traceback:
    [C]: in function 'first_row'
    ...\main.lua:33: in main chunk

そのまったく同じ SQL クエリが、同じデータベースの Python で機能します。

sqliteのドキュメントから

"ROWID と INTEGER PRIMARY KEY

すべての SQLite テーブルのすべての行には、テーブル内の行を一意に識別する 64 ビットの符号付き整数キーがあります。この整数は、通常「ROWID」と呼ばれます。列名の代わりに、大文字と小文字を区別しない特別な名前「rowid」、「oid」、または「rowid 」のいずれかを使用して、rowid 値にアクセスできます。

興味のある人のために、私の場合の作業コードは次のとおりです。

local minId
local maxId
for row in db:nrows("SELECT MIN(rowid) AS `rowmin` FROM " .. table) do
    minId = row.rowmin
end
for row in db:nrows("SELECT MAX(rowid) AS `rowmax` FROM " .. table) do
    maxId = row.rowmax
end
4

1 に答える 1

1

lua-sqlite3ラッパーを使用している場合db:rows()は、first_row. 呼び出しは次のとおりです。

row = db:rows("SELECT MIN(rowid) AS `rowmin`, MAX(rowid) AS `rowmax` FROM table")
local minID, maxID = row.rowmin, row.rowmax

コメントでの @CL の提案に基づく:

row = db:rows("SELECT MIN(rowid) AS `rowmin` FROM table")
local minID = row.rowmin
row = db:rows("SELECT MAX(rowid) AS `rowmax` FROM table")
local maxID = row.rowmax
于 2013-03-28T10:11:08.463 に答える