排序问题

来源:互联网 发布:37轩辕剑神臂进阶数据 编辑:程序博客网 时间:2024/06/05 16:16

问题描述

最近遇到一个问题,需要对一张表中的记录进行前后排序。这看似是很简单的问题,使用order就可以实现,

比如:在数据库中设置一个专门字段用来表示输出顺序,再来结合order就可以实现按序输出了。

但是这里仅仅是指输出!!!当设置完新的输出顺序之后,难道你还将数据库中的该字段全部更新一遍?如果你的答案是Yes,那么我只能回答你“呵呵”。

解决方案

其实这里有一个突破口!那就是数据库怎么存都没问题,重点是每次都能按照我的期望将数据进行输出,所以我们只要保存希望输出的顺序就行了,这里拿下面的表做例子:

字段名 说明 goods_id 主键 goods_name 商品名称

其他字段都不用了,这里我们希望能按下面的顺序输出数据:

goods_id goods_name 1 g1 10 g2 3 g3 6 g4 8 g5 11 g7

看出来了吗?我们只要保存的信息就是

1,10,3,6,8,11

当我们想输出数据时,只要将数据按照上面的顺序进行输出,当需要进行分页时,就使用

$order_string="1,10,3,6,8,11";$order_array=explode(",",$order_string);//当需要进行分页时,假设页面数为:$p,每页显示商品数量为$every_page_data$offset=($p-1)*$every_page_data;$show_goods_id_array=array_slice($order_array,$offset,$every_page_data);$show_goods_id_string=implode(",",$show_goods_id_array);

上面使用的获取分页信息的方法可能比较麻烦,但是鉴于我还是一只小白,所以请大神指点。

数据存储

上面我们介绍了仅需存储数据输出的顺序,但是这个数据存储在哪里就是一个问题了,这里是刚好项目决定采用Redis数据库,所以就作为一个简单的key-value,存储在字符串类型的value中了。

删除数据

上面仅仅是存储了现有数据,但是问题是当数据进行修改时,比如删除其中的一个goods信息时,这个时候你就需要一起将输出顺序进行输出,就是删除其中的goods_id,删除我采用的方式是这样的:

$delete_goods_id;$order_string="1,10,3,6,8,11";$order_array=explode(",",$order_string);foreach($order_array as $key=>$value){    if($value==$delete_goods_id){        unset($order_array[$key]);        break;    }}$new_order_string=implode(",",$order_array);

上面我使用了很麻烦的方式去遍历数组,发现该元素后删除该元素,之后再重新组合成字符串,真的是很麻烦,我原来的思路是这样的:

$new_order_string=str_replace($delete_goods_id,"",$order_string);

但是这样存在一个很大的问题,假设原始的数据信息是这样的:

1,2,待删除内容,4,5,6

执行上面的处理结果后就变成了:

1,2,,4,5,6

就会有一个数据位是空的。当待删除的数据在首位或者末尾时,最后的结果就是这样的:

,1,2,3,4,5

1,2,3,4,

这样我们在下次调用时都很麻烦,所以我能想出的结果办法就是上面那样。

原创粉丝点击