如何在 PostgreSQL 中识别结果集中的最后一行?

huangapple go评论86阅读模式
英文:

How to identify the last row in the result set postgres?

问题

我正在使用Postgres 9.5,并使用golang库lib/pq与数据库进行交互。我执行了一个返回多行的select查询,然后使用for rows.Next()进行迭代。有没有办法在最后一条记录之前停止迭代?如果是最后一条记录,我想在控制台上打印其他内容。类似以下的代码:

for rows.Next() {
    var id string
    err = rows.Scan(&id)
    if err != nil {
        log.Printf("Error in rows.Scan: %s\n", err)
    }

    if (不是最后一行) {
        fmt.Println(id + "我不是最后一行")
    } else {
        fmt.Println(id + "我是最后一行")
    }
}
英文:

I am using Postgres 9.5 with and using golang library lib/pq to interact with database. I execute a select query which returns multiple rows and then I iterate using for rows.Next() Is there anyway I ca stop before the lat record. I want to print something else on console if its the last record. Something like the following:

for rows.Next() {

	var id string
	err = rows.Scan(&id)
	if err != nil {
		log.Printf("Error in rows.Scan: %s\n", err)
	}

	if (row is not last) {
		fmt.Println(id + "I am not last")
	} else {
		fmt.Println(id + "I am last")
	}
}

答案1

得分: 4

你可以在Go语言中实现类似do-while循环的功能。

notLast := rows.Next()
for notLast {
    //... rows.Scan
    notLast = rows.Next()
    if notLast {
        fmt.Println(id + "I am not last")
    } else {
        fmt.Println(id + "I am last")
    }
}

在这段代码中,notLast变量用于判断是否还有下一行数据。在循环开始时,首先检查是否有下一行数据,如果有,则执行循环体内的代码,并更新notLast的值。如果没有下一行数据,则退出循环。根据notLast的值,打印不同的输出信息。

英文:

You can impliment something like a do while loop in go.

notLast := rows.Next()
for notLast {
	//... rows.Scan
	notLast = rows.next()
	if notLast {
		fmt.Println(id + "I am not last")
	} else {
		fmt.Println(id + "I am last")
	}
}

huangapple
  • 本文由 发表于 2016年11月8日 17:19:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/40483087.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定