如何获得具有相同姓氏的下一条记录

时间:2013-03-12 10:32:08

标签: c++ sqlite

我正在尝试从我的数据库中按字母顺序(asc或desc)顺序从sqlite中检索下一个或上一个记录。但是,姓氏不是唯一的字段,而且我只能为每个查询检索一条记录(LIMIT 1),因为我正在使用sqlite的回调机制,我不想为每个可能的结果返回缓冲结果来自查询(除非没有其他选项)。我还有一个名为customerId的唯一字段(即行ID)。

这是我目前使用的声明:

stream << "select * from customerTable where LastName >= '" << customerLastName << "' order by LastName asc limit 1";

我尝试了其他一些陈述,例如:

stream << "select * from customerTable where LastName >= '" << customerLastName << "' and CustomerId != " << customerId << " order by LastName asc limit 1";

但是这个人在两个姓氏相同的记录之间翻转。

所以我需要找到一个技巧,无论姓氏是否相同,都会给我下一个(或前一个记录)。

2 个答案:

答案 0 :(得分:2)

获取所有唯一名称的更简单方法是使用SELECT DISTINCT

select distinct LastName from customerTable order by LastName asc

这将按字母顺序为您提供所有唯一名称。

答案 1 :(得分:0)

如果你坚持使用限制为1的查询,并且你仍然想要一个接一个地查询具有相同姓氏的所有记录,那么你可以继续你的第二种方法,即使它有点奇怪。在使用and CustomerId !=查询第二条记录后,您必须使用and CustomerId not in (firstId, secondId)查询下一条记录,依此类推。

但是,你真的不应该这样。干净的方法是首先准备一个语句(也使用主机变量而不是字符串连接!)然后调用sqlite_step()直到你检索完所有记录。