2014-04-25 43 views
0

我正尝试使用php和mysql创建下一个和上一个导航。我的问题是我无法使它工作。这是我试过到目前为止:MySQL通过列表顺序获取基于id顺序的上一个和下一个记录

查询:

select * from blog_entry where deleted='n' and isDisplayed='y' and b_id = (select max(b_id) from blog_entry where deleted='n' and isDisplayed='y' and b_id < 154) order by listorder desc 

enter image description here

所以在我的网页,如果我在条目编号154(B_ID:154 ),点击下一个按钮将显示来自b_id 152的内容,与之前的记录相同。提前致谢! :)

+0

@Strawberry:无论你读什么,这个问题都不是关于分页 – flaschenpost

回答

0

下面的查询会给你没有记录153

select * from blog_entry where deleted='n' and isDisplayed='y' and b_id = (select max(b_id) from blog_entry where deleted='n' and isDisplayed='y' and b_id < 154) order by listorder desc limit 1 

下面的查询会给你没有记录155

select * from blog_entry where deleted='n' and isDisplayed='y' and b_id = (select max(b_id) from blog_entry where deleted='n' and isDisplayed='y' and b_id > 154) order by listorder limit 1 
+0

如果我在b_id:154上,我应该得到152和140的前一个。我按照listorder获取下一个和上一个记录的b_id。感谢您的评论,但:) @Ronak –

0

使用此

select * from `blog_entry` where `deleted`='n' and `isDisplayed`='y' order by `b_id` desc limit 1,1 
0

你能做到一半它在原始选择你阅读blog_entries的地方。其他解决方案每行需要2个额外的选择,这是更多。另一半(存储“下一个”)我会在读取选定的值后在PHP中做。

谨防选择字段的正确顺序:

set @last_id=null; 

select * from 
(
    select @last_id as last_id, (@last_id := b.id) as id, b.listorder, b.<content> 
    from blog_entry b where deleted='n' and isDisplayed='y' 
    order by b.id 
) as tech_subsel 
order by listorder; 

编辑:PHP的一部分

$result = array(); 

while ($row = <read row>){ 
    if(isset($result[$row['last_id']]){ 
      $result[$row['last_id']]['next_id'] = $row['id']; 
    } 
    $result[$row['id']] = $row; 
} 

那么你有last_id和NEXT_ID在一次扫描。

相关问题