0

我有一个由单词和相关数字组成的简单 MySQL 表。每个单词的数字都是唯一的。我想找到索引大于给定数字的第一个单词。举个例子:

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

如果给我数字“9”,我希望返回“cat”,因为它是索引大于 9 的第一个单词。

我知道我可以通过查询获得完整的排序行列表:

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 回答