0

単語と関連する番号で構成される単純なMySQLテーブルがあります。番号は単語ごとに一意です。インデックスが指定された数よりも大きい最初の単語を見つけたい。例として:

-----------------------
| WORD:    | F_INDEX: |
|---------------------|
| a        | 5        |
| cat      | 12       |
| bat      | 4002     |
-----------------------

番号「9」が与えられた場合、インデックスが9より大きい最初の単語であるため、「cat」を返したいと思います。

次のクエリを実行すると、並べ替えられた行の完全なリストを取得できることを知っています。

SELECT * FROM table_name ORDER BY f_index;

しかし、代わりに、これを行うMySQLクエリを作成したいと思います。(混乱は、クエリの現在の行を追跡する方法がわからないという事実にあります)。私はこのようなものでループできることを知っています:

CREATE PROCEDURE looper(desired_index INT)
BEGIN 
    DECLARE current_index int DEFAULT 0
    // Loop here, setting current_index to whatever the next rows index is, 
    // then do a comparison to check it to our desired_index, breaking out 
    // if it is greater.
END;

どんな助けでも大歓迎です。

4

2 に答える 2

3

これを試して:

SELECT t.word
     , t.f_index
  FROM table_name t
 WHERE t.f_index > 9 
 ORDER 
    BY t.f_index
 LIMIT 1

大量の行をプルして必要な行を特定するよりも、データベースに必要な行を返す方がはるかに効率的です。

このクエリのパフォーマンスを最高にするには、インデックスが必要になりますON table_name (f_index,word)

于 2013-01-28T05:02:46.227 に答える
1

MYSQLステートメントを使用して、f_indexが渡した値よりも大きい、f_indexから最初に見つけたアイテムを取得してみませんか。

例えば ​​:

select word from table_name
where f_index > desired_index
order by f_index
limit 1
于 2013-01-28T05:05:25.683 に答える