Sql 按laravel中的旋转值排序

Sql 按laravel中的旋转值排序,sql,laravel,laravel-5,laravel-5.2,Sql,Laravel,Laravel 5,Laravel 5.2,我正在尝试使用orderBy方法在我的电子商务网站上为“推荐”创建排序功能。下面是一个简单的orderby示例: if($params['sortby'] == 'numpricehl') $query->orderBy('price','desc'); 我希望做的是通过旋转值来排序。示例:给定10个定价为:(10,20,30,….100)的产品,它将按如下方式订购(低、中、高、低、中、高)等,以便产品显示如下(10,50100,20,60,80) 执行此操作的最佳方法是什么?以下是一个

我正在尝试使用
orderBy
方法在我的电子商务网站上为“推荐”创建排序功能。下面是一个简单的orderby示例:

if($params['sortby'] == 'numpricehl') $query->orderBy('price','desc');
我希望做的是通过旋转值来排序。示例:给定10个定价为:(10,20,30,….100)的产品,它将按如下方式订购(低、中、高、低、中、高)等,以便产品显示如下(10,50100,20,60,80)


执行此操作的最佳方法是什么?

以下是一个对查询结果有效的解决方案:

$tiers=3;
$result=[];
$products=Product::orderBy('price')->get();
$size=ceil($products->count()/$tiers);
$split=$products->pull('price')->chunk($size);
而(!$split[0]->isEmpty()){
对于($tier=0;$tier<$tiers;$tier++){
如果(!$split[$tier]->isEmpty()){
$result[]=$split[$tier]->shift();
}
}
}
可能有一个数据库内解决方案使用了
orderBy()
,但我敢肯定它更复杂

chunk()
部分还不理想,因为它将10个产品分成
4,4,2

您可以添加此项以获取
4,3,3

if($products->count()%%$tiers==1){
$split[2]->prepend($split[1]->pop());
}

我认为随机顺序是不够的?不,不幸的是,它可能在一个范围内。例如:可能所有的值都是固定的?剩下的产品呢(当层次“填充”不均匀时)?它们不是固定的,因为价格不时波动,所以我想它必须基于最小值、最大值和中间值。至于填充不均匀的层,它将不得不继续运行,直到用完一个类别,然后它将只是交替其余类别。例如:(低,中,高,低,中,高,中,高,中,中,高,高,高)。或者,如果比较容易的话,只要在三个类别中的一个用完后按一个类别进行排序就可以了。我希望这回答了你的问题。我可能执行错了,但我不得不使用“sortby”,因为我不断得到错误“methodnotfoundorderby”或“methodnotfoundsplit”。无论如何,它仍然会抛出一个错误,但在抛出错误时,它至少会打印一些值。这里有一些“数组('39','28','158','135','109','110','115','105','135','110','107','134','110','156','164','132','121','140','154','161','137','132','126','186','134',也不完全是我想要的。你是如何执行它的?
$tiers=3;$result=[];$products=Package::all()->sortBy('price','desc')->get();$split=$products->split($tier);while($split[0]->isNotEmpty()){for($tier=0;$tier<$tier;$tier++){if($split[$tier]->isNotEmpty()){$result[]=$split tier[$tier]->shift();}}
,它将此错误与数据一起抛出:
asort()预期参数2为整数,字符串给定
是否尝试过
Package::orderBy('price')->get();
?是,它返回此值:
方法拆分不存在。