如何从sql语句中获取单行结果(例如以表/数组的形式)。使用Lua Sqlite(LuaSQLite3)。例如这一个:
SELECT * FROM sqlite_master WHERE name ='myTable';
到目前为止,我注意到了:
具体问题是:
Q1 - 如何获得单行(比如第一行)结果?
Q2 - 如何获取行数? (例如num_rows_returned = db:XXXX(sql))
答案 0 :(得分:3)
为了获得单行,请使用db:first_row
方法。像这样。
row = db:first_row("SELECT `id` FROM `table`")
print(row.id)
为了获取行计数,请使用SQL COUNT
语句。像这样。
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)
答案 1 :(得分:2)
只需循环遍历迭代器,即从rows
或您使用的任何函数返回。除了你在最后添加一个break
,所以你只需要迭代一次。
获取计数就是使用SQL。您可以使用SELECT语句计算它:
SELECT count(*) FROM ...
这将返回包含单个值的一行:查询中的行数。
答案 2 :(得分: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
>
答案 3 :(得分: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"