How can i get value from one column in SQLite?
Example, i have column named houseNames
and want to get value from third row, how can i do that?
答案 0 :(得分:0)
编辑后很难说出你的主要目的是什么 但它似乎你试图搜索lua的sqlite3包装器。 根据我的经验,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
所以你甚至可以通过比列号更方便的列名获得你想要的任何细节。
从db中获取第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返回码。
答案 1 :(得分:0)
另一种方法是使用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
]]