访问Go中MySQL查询结果的第二行

访问Go中MySQL查询结果的第二行,mysql,sql,go,Mysql,Sql,Go,我正在Go中运行一个MySQL查询。我想访问查询结果的第二行。我知道我可以用 for rows.Next { } 但是我不想运行一个循环来访问第二行(然后在第二次迭代后中断循环)。 怎么办 以下是一段代码片段: rows,err:= db.Query("SELECT status,ts FROM events WHERE node = ? order by ts desc limit 2", testNode.ID); defer rows.Close() if ( err!= nil){

我正在Go中运行一个MySQL查询。我想访问查询结果的第二行。我知道我可以用

for rows.Next {

}
但是我不想运行一个循环来访问第二行(然后在第二次迭代后中断循环)。 怎么办

以下是一段代码片段:

rows,err:= db.Query("SELECT status,ts FROM events WHERE node = ? order by ts desc limit 2", testNode.ID);
defer rows.Close()
if ( err!= nil){
    t.Error("Some Error" + err.Error())
}
isNext:=rows.Next()
if(isNext == false) {
    t.Error(" No rows in query result")
}
rows.Scan(&status)
// What to do to use second row ?
坚持 如果要放弃第一行,那么从数据库中检索它是没有意义的

使用
LIMIT 1,1
放弃第一个结果并将结果限制为1行(查看
LIMIT
at:)的文档。然后只需继续读取第一行,即查询结果的第二行:

q := "SELECT status, ts FROM events WHERE node = ? order by ts desc limit 1, 1"
rows, err := db.Query(query, testNode.ID);
if err != nil {
    t.Error("Error:", err)
    return
}
defer rows.Close()

if !rows.Next() {
    t.Error("No result")
    return
}
if err := rows.Scan(&status); err != nil {
    t.Error("Failed to scan:", err)
    return
}

// All good, use status
fmt.Println("Status:", status)
更多使用
限制的示例

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15
SELECT * FROM tbl LIMIT 5;     # Retrieve first 5 rows
习惯于 如果最多需要1行,还可以使用
DB.QueryRow()
,结果将更加紧凑:

q := "SELECT status, ts FROM events WHERE node = ? order by ts desc limit 1, 1"
if err := db.QueryRow(query, testNode.ID).Scan(&status); err != nil {
    t.Error("Failed to scan, no result?")
    return
}

// All good, use status
fmt.Println("Status:", status)

实际上,我想比较前2行的属性。所以我不会放弃第一排。所以我想你的答案并不能解决我的问题。@user3150716如果你想比较前两行,那么你不想读第二行,而是读前两行。你的问题有误导性。