我对文章排序进行手动前移后移,但是sql语句好像就没起作用,哪位帮忙看看,我是实在看不出来了
/*前移*/if($result=='up'){ $sql0=$db->query(select sort from .$db->table('product'). where id='$id'); $row=$db->fetch_array($sql0); if(!$row){ $oldpx=1; }else{ $oldpx=$row['sort']; } if($oldpx>1){ $db->query(update .$db->table('product'). set sort=sort+1 where sort=.$oldpx-1); $db->query(update .$db->table('product'). set sort=sort-1 where id=.$id); } header(location:product_list.php\n); exit;}/*后移*/if($result=='down'){ $sql1=$db->query(select sort from .$db->table('product'). where id='$id'); $row=$db->fetch_array($sql1); if(!$row){ $oldpx=9999; }else{ $oldpx=$row['sort']; } $sql2=$db->query(select sort from .$db->table('product'). order by sort desc limit 1); $rows=$db->fetch_array($sql2); if(!$rows){ $maxpx=9999; }else{ $maxpx=$rows['sort']; } if($oldpxquery(update .$db->table('product'). set sort=sort-1 where sort=.$oldpx+1); $db->query(update .$db->table('product'). set sort=sort+1 where id=.$id); } header(location:product_list.php\n); exit;}
回复讨论(解决方案) 会不会是文章的sort并不是连续的,就前移来说你取sort-1作为调教来修改有可能没修改到数据库记录,然后即使当前sort+1可能还是没有比下个文章的sort大
/*前移*/if($result=='up'){ $sql0=$db->query(select sort from .$db->table('product'). where id='$id'); $row=$db->fetch_array($sql0); if(!$row){ $oldpx=1; }else{ $oldpx=$row['sort']; } if($oldpx>1){ $db->query(update .$db->table('product'). set sort=sort+1 where sort=.$oldpx-1); $db->query(update .$db->table('product'). set sort=sort-1 where id=.$id); } header(location:product_list.php\n); exit;}/*后移*/if($result=='down'){ $sql1=$db->query(select sort from .$db->table('product'). where id='$id'); $row=$db->fetch_array($sql1); if(!$row){ $oldpx=9999; }else{ $oldpx=$row['sort']; } $sql2=$db->query(select sort from .$db->table('product'). order by sort desc limit 1); $rows=$db->fetch_array($sql2); if(!$rows){ $maxpx=9999; }else{ $maxpx=$rows['sort']; } if($oldpxquery(update .$db->table('product'). set sort=sort-1 where sort=.$oldpx+1); $db->query(update .$db->table('product'). set sort=sort+1 where id=.$id); } header(location:product_list.php\n); exit;}
红色标注的那里改成 where id='.$id.');
if($_request[action] == up){ uppx($_request['goods_id']);}elseif($_request[action] == down){ downpx($_request['goods_id']);}function uppx($goods_id){ if(!$goods_id) { $goods_id=0; } $sql=$globals['db']->query(select px from .$globals['db']->table('product'). where id=.$goods_id); $rs=$globals['db']->fetch_array($sql); if(!$rs) { $oldpx = 1; } else { $oldpx = $rs['px']; } if($oldpx>1){ $oldpx=$oldpx-1; $globals['db']->query(update .$globals['db']->table('product'). set px=px+1 where px=.$oldpx); $globals['db']->query(update .$globals['db']->table('product'). set px=px-1 where id=.$goods_id); } header(location:product_list.php); exit; }function downpx($goods_id){ if(!$goods_id) { $goods_id=0; } $sql=$globals['db']->query(select px from .$globals['db']->table('product'). where id=.$goods_id); $rs=$globals['db']->fetch_array($sql); if(!$rs) { $oldpx=1; } else { $oldpx=$rs['px']; } //假如$oldpx=1的话 $sql1=$globals['db']->query(select * from .$globals['db']->table('product'). order by px desc limit 1); $row=$globals['db']->fetch_array($sql1); if(!$row) { $maxpx=999; } else { $maxpx=$row['px']; } //到这里那么最大的$maxpx=4 if($oldpxquery(update .$globals['db']->table('product'). set px=px-1 where px=.$oldpx); $globals['db']->query(update .$globals['db']->table('product'). set px=px+1 where id=.$goods_id); } header(location:product_list.php); exit; }
根据你那代码我自己完整的演示了一遍,实现你要的效果了