7

次のように smt を返す NAME で並べ替えられたクエリがあります。

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

既知の ID && NAME の次の ID と前の ID (存在する場合) を知る必要があります。

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 = 4242ID

于 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 に答える