【问题标题】:Lua-Sqlite3 get "rowid"Lua-Sqlite3 得到“rowid”
【发布时间】:2013-03-18 16:37:05
【问题描述】:

当我运行代码时:

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 documentation

"ROWID 和整数主键

每个 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

【问题讨论】:

    标签: sql sqlite lua row coronasdk


    【解决方案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 在 cmets 中的建议:

    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
    

    【讨论】:

    • 请注意,如果您对 MINMAX 值使用单独的查询,SQLite 的优化器可以做得更好。
    • @CL。好吧,不知道。谢谢。
    • 工作,谢谢!奇怪的是,您无法获得单行,而且它仅在您选择 rowid 作为其他内容时才有效。你介意解释一下原因吗?
    • @JaredGlass 如果您不使用AS 选择器,那么您的表格键将被访问为:row["MAX(rowid)"]。我使用AS 来缩短后面的部分。
    • 啊哈。说得通。谢谢:D
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多