php按2或3列排序数组,然后再次混合

时间:2016-09-08 09:51:08

标签: php mysql sorting

目前,我们按网格的列对网格中的产品进行排序。第一列A,然后是B,然后是C.列A可以保留收入(或利润),列B可以保存产品的添加日期。如果我们按收入排序,然后按日期添加,则结果是高收益产品列表;具有相同收入的产品随后按日期排序。反过来说,添加第一个日期然后收入会产生一个按新产品排序的列表。

我们面临的问题如下:如果我们添加100个新产品并按最新排序,那么畅销书在第1页无处可见(但在列表的最远处)。当我们按畅销书排序时,那么新产品永远不会有机会,因为它们几乎从未见过,也从未因收入而攀升。

所以我的问题是:如何根据属性1,然后是2等对数组进行排序。但之后&#39; mingles或mixes&#39;在上述情况下的排序,所以我们看到例如:1畅销书,1新,1畅销书,1新..或类似1畅销书,2新,1畅​​销书,2新...所以你有点推广< / em> 1个属性

可以这样做吗?

在原始数据的示例下方,然后是正常的&#39;按收入划分,最后一个网格包含我们希望实现的排序。

怎么会这样做?这可以用PHP中的一个或两个来完成吗?或者MySQL有什么用于此目的。

感谢您的帮助

enter image description here

2 个答案:

答案 0 :(得分:3)

您可以尝试纯粹基于MySQL的解决方案:

SELECT * FROM (
    SELECT @inc1 := IF(@inc1 IS NULL, 1, @inc1 + 1) AS `inc`, `product_id`, ... FROM `products` ORDER BY `sales`
UNION
    SELECT @inc2 := IF(@inc2 IS NULL, 1, @inc2 + 1) AS `inc`, `product_id`, ... FROM `products` WHERE `date_added` > 'yesterday' ORDER BY `date_added`
) AS `tbl` GROUP BY `product_id` ORDER BY `inc` ASC

这给了你一个想法,但基本上我们想要实现的是这个,我们首先得到所有最好的卖家并给他们一个生成的增量号,其次我们做同样但最新的产品..因为两个数据集分别增加,我们得到相同的数字。通过产品ID进行分组将消除任何重复(例如,如果您的新产品立即成功),并且inc的订单将很好地排序以实现您的混合结果......

无论如何,这个理论很好!希望这会给你一个良好的开端;)

答案 1 :(得分:-1)

如果要按自定义顺序对结果集进行排序,则MySQL具有FIELD()函数

ORDER BY FIELD(column,'value1','value2','value3')