【问题标题】:SQLite and Lua: Selecting column data from given rowSQLite 和 Lua:从给定行中选择列数据
【发布时间】:2016-04-05 07:28:04
【问题描述】:

如何从 SQLite 的一列中获取价值? 例如,我有名为houseNames 的列,并且想从第三行获取值,我该怎么做?

【问题讨论】:

  • 在对dbQuery 的调用中,i 的用途是什么?您是否在寻求有关 SQL 查询的帮助?还是使用lua代码?还是两者兼而有之?
  • i 是我想要获取值的行的值,它工作得很好。
  • 什么是dbQuery?因为那个 SQL 查询没有使用任何参数,并且似乎正在调用一个名为 getFreeID 的 SQL 函数来确定要返回哪一行......除非我在这里错过了一些基本的东西。
  • 好吧,我改了主帖
  • 这只是让问题变得更糟,因为它现在根本不包含有关您的情况的信息,也没有任何迹象表明您自己尝试过任何事情(这通常是在此站点上获得帮助的先决条件)。

标签: sqlite lua


【解决方案1】:

很难说你编辑后的主要目的是什么, 但似乎您尝试在 sqlite3 包装器中搜索 lua。 根据我的经验,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

不要按原样看这段代码,我只是写了简单的例子,你应该先阅读api of lsqlite3,并检查每个函数的sqlite3返回码。

【讨论】:

    【解决方案2】:

    另一种方法是使用 SQLite 直接提取给定的行。您显然需要某种方式来确定第三行的含义,例如是按 rowid、其他字段、按字母顺序排序的 houseName 等吗?

    注意:数据库中的行没有任何固有的顺序(至少在理论上),甚至没有添加行的顺序,即使看起来如此,也不能保证 SELECT-ed 的行会除非给出 ORDER BY 子句,否则按任何预期顺序返回。

    一旦你有了,你可以使用 LIMIT 子句两次来获得所需的行。您需要一个包含子查询的查询。

    在子查询中,您将结果限制为您要查找的行号(例如 3)。在外部查询中,您以相反的方向排序并将 LIMIT 限制为 1。

    例子:

    -- 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
    ]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-17
      • 2021-07-09
      • 1970-01-01
      • 2023-01-18
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多