日期:2014-05-17  浏览次数:20690 次

排序问题
是这样的,一个视频有多个播放器图标,每一个图标有对应的播放地址。
在数据库表字段是这样的
vod_pic varchar(200) not null,
vod_reurl varchar(1000) not null,

播放图标用$$$分割,比如 youku$$$tudou
播放地址用$$$分割,比如www.youku.com$$$www.toudou.com

他们存储的信息,是一一对应应的,

说了这么多,现在进入正题


我想在后台写一个功能控制它们在前台页面的显示顺序(前台我是用的循环,输出,所以默认排序是就是数据库里数据存的先后顺序)。

还请大侠们指点一下,应该怎么样做。

因为业务上的要求,比如,我要把tudou排在第一,那么所有视频的带有toudou的图标的,都应该排在第一位。

这个我应该怎样做呢。

我打算用代码在后台操作数据存的位置,来改变顺序的问题。但是这一种可能出错的可能性很大。

想请大侠们指点一下高招。


------解决方案--------------------
你可以多加一个字段用来做排序的啊;
前台使用循环那不是很好搞定吗?
循环的时候添加进一个字段
------解决方案--------------------
写个算法重新排序不就得了
PHP code
<?php

$a='youku$$$tudou';//vod_pic字段
$b='www.youku.com$$$www.tudou.com';//vod_reurl字段
$a_arr=explode('$$$',$a);
$b_arr=explode('$$$',$b);
$a_tudouarr=array("tudou");
$b_tudouarr=array("www.tudou.com");
if(in_array("tudou",$a_arr)){
$a_arr = array_merge($a_tudouarr,array_diff($a_arr, $a_tudouarr));
$b_arr = array_merge($b_tudouarr,array_diff($a_arr, $b_tudouarr));
}
print_r($a_arr);//排序新的数组,tudou字段在第一个,接来下循环出来就可以了
print_r($b_arr);//排序新的数组,tudou字段在第一个,接来下循环出来就可以了

?>

------解决方案--------------------
我那个算法就是帮你重新排序的呀!跟多少有什么关系!你可以测试一下!
------解决方案--------------------
用数据库实现吧。拿出来就是,不是很好吗?
------解决方案--------------------
用数据库确实也可以,用替换过滤就可以了
------解决方案--------------------
修改你的数据组织方式!
使 vod_pic 和 vod_reurl 一一对应
而不是现在这个样子

你现在的数据组织方式,并不能象你想象的那样能节省数据库的存储空间
反而白白的浪费了大量程序与形式的空间和时间