2

私はそれを行う方法を見つけることができず、この質問を検索する方法がわかりません。私が見つけたのは、私が望んでいたものではなく、答えが当てはまらないためです。

2つのフィールド(charとnum)を持つテーブルがあります。例のように、「num」は一意ですが、「char」は一意ではありません。

char | num
_________
a    | 2
b    | 1
c    | 3
c    | 4 <-- I am here
c    | 7
c    | 8
d    | 5
e    | 9
f    | 6

私が欲しいのは、'char'で順序付けられたテーブルでマークされた行から始まるN行をフェッチすることです。

使っています

SELECT * FROM table WHERE char >= $current_char ORDER BY char,num LIMIT $N

しかし、char='c'およびnum='3'の行から始まるため、私が望むことは実行されません。

編集:コードがより明確になるので、おそらくxdazzの答えを数えて使用しますが、これは別の方法で実行できるようです:

SELECT * FROM table WHERE char > $current_char OR (char = $current_char AND num >= $current_num) ORDER BY char,num LIMIT $N

しかし、それはあまりきれいではありません。

4

3 に答える 3

2

あなたがマークした<-- I am hereということは、それが4番目のレコードであることを知っているということです。

SELECT * FROM table ORDER BY char,num LIMIT 4, $N
于 2012-12-13T12:25:28.787 に答える
0

を使用where char >= current_charしましたが、chars uは一意ではないと言いました。つまり、行5または行6にすることができますが、代わりにそのような一意の行を使用します。

     SELECT * FROM table WHERE num >= $current_num ORDER BY char LIMIT $N

あなたはchar>somecharとは言えません

于 2012-12-13T12:30:32.003 に答える
0

基本的な問題は、選択基準が何であるかを説明していないことです。

とマークされたレコードから開始することを指定しましたが、<-- I am hereそのレコードを他のレコードと区別するものを定義していません。

そのレコードの何が特別で、なぜそこから始めたいのかを定義できたら、ここの誰かがそのレコードを見つけるためのクエリを書くのを手伝ってくれるでしょう。そうでなければ、私たちは皆推測しているだけです。

于 2012-12-13T13:29:22.807 に答える