0

データベースからアルファベット順(ascまたはdesc)の名前フィールドに基づいてsqliteから次または前のレコードを取得しようとしています。ただし、姓は一意のフィールドではありません。また、sqliteのコールバックメカニズムを使用しており、返される可能性のあるすべての結果の結果をバッファリングしたくないため、クエリごとに1つのレコード(LIMIT 1)しか取得できません。クエリから(他にオプションがない場合を除く)。また、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つのレコード間を行き来し続けます。

したがって、姓が同じであるかどうかに関係なく、次の(または前のレコード)を取得できるトリックを見つける必要があります。

4

2 に答える 2

2

すべての一意の名前を取得するはるかに簡単な方法は、次を使用することSELECT DISTINCTです。

select distinct LastName from customerTable order by LastName asc

これにより、すべての一意の名前がアルファベット順に表示されます。

于 2013-03-12T10:41:33.743 に答える
0

制限 1 でクエリを使用することを主張し、同じ姓を持つすべてのレコードを次々にクエリしたい場合は、2 番目のアプローチに進むことができます。で 2 番目のレコードをクエリした後、次のレコードをand CustomerId !=クエリする必要がありますand CustomerId not in (firstId, secondId)

しかし、あなたは本当にそのように行くべきではありません。クリーンな方法は、最初にステートメントを準備し (文字列連結の代わりにホスト変数も使用してsqlite_step()ください!)、すべてのレコードを取得するまで呼び出すことです。

于 2013-03-12T10:43:09.250 に答える