7

我有一个按 NAME 排序的查询,它返回 smt,如下所示:

 ID     NAME
2121927 AAA
2123589 AAB
2121050 AAC
2463926 BBB ---> known ID
2120595 CCC
2122831 DDD
2493055 EEE
2123583 EEF

我需要知道已知 ID && NAME 的下一个 ID 和上一个 ID(如果存在)只有 1 个查询怎么可能?

4

2 回答 2

12
  SELECT *,
         'next'
    FROM table
   WHERE `name` > 'BBB'
ORDER BY `name`
   LIMIT 1

UNION

  SELECT *,
         'previous'
    FROM table
   WHERE `name` < 'BBB'
ORDER BY `name` DESC
   LIMIT 1

如果您不知道特定BBB name的字段值 - 您可以将其替换为子查询,例如SELECT name FROM table WHERE id = 4242已知ID值在哪里。

于 2010-12-16T14:52:45.577 回答
-5

我是这样做的:
它不是最快的,但它不关心字段的顺序。
按您想要的顺序查询 db 中的所有行。
使用 php foreach 查找当前 ID。
获取当前id的数组索引,使索引+1或索引-1。

$current_id = 6;
$data = get_all_data_from_db();
foreach($data as $index=>$row) {
if($current_id == $row['id']) {
$next = $index+1;
$prev = $index-1;
}
$previous_row = $data[$prev];
$next_row = $data[$next];

于 2012-07-26T15:28:51.650 回答