【问题标题】:sqlite - how do I get a one row result back? (luaSQLite3)sqlite - 我如何获得单行结果? (luaSQLite3)
【发布时间】:2012-04-27 00:35:47
【问题描述】:

如何从 sql 语句中获取单行结果(例如,以表/数组的形式)。使用 Lua Sqlite (LuaSQLite3)。比如这个:

SELECT * FROM sqlite_master WHERE name ='myTable';

到目前为止我注意到:

  • 使用“nrows”/“rows”返回一个迭代器
  • 使用“exec”似乎没有返回结果(?)

具体问题如下:

Q1 - 如何获取单行(比如第一行)结果?

Q2 - 如何获取行数? (例如 num_rows_returned = db:XXXX(sql))

【问题讨论】:

  • 什么是“第一行”?你如何定义它,因为 SQL 表中的行是无序的?
  • 如果你只想要一个结果,你可以使用LIMIT 1。最好使用orderby,否则你会得到一个任意记录
  • @NicolBolas - 我想测试是否真的有任何行,所以我的问题是我想我会问如何获得单行。但是任何可以很容易判断是否有任何行的东西都会很好
  • @KrishnanunniJeevan - 好的,请注意

标签: sqlite lua coronasdk


【解决方案1】:

为了获得单行,请使用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)

【讨论】:

【解决方案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】:

    只需遍历从 rows 或您使用的任何函数返回的迭代器。除了你在最后放了一个break,所以你只迭代一次。

    获取计数完全是使用 SQL。您可以使用 SELECT 语句计算它:

    SELECT count(*) FROM ...
    

    这将返回包含单个值的一行:查询中的行数。

    【讨论】:

    【解决方案4】:

    这与我在项目中使用的类似,对我来说效果很好。

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      相关资源
      最近更新 更多