我有一个由NAME命令的查询返回smt,如下所示:
ID NAME
2121927 AAA
2123589 AAB
2121050 AAC
2463926 BBB ---> known ID
2120595 CCC
2122831 DDD
2493055 EEE
2123583 EEF
我需要知道下一个ID和已知ID&&的上一个ID(如果存在)。名称 只有1个查询怎么可能?
答案 0 :(得分: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 = 42
之类的子查询,其中42
是已知的ID
值。
答案 1 :(得分:-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];