mysql php 按日期分组,PHP-在MYSQL中按发生时间将两列分组并按时间排序

我正在使用一个表,其中包含将由激光切割机处理的上载文件的列表.

为了提高效率,我需要列出具有相同材质和颜色的文件,以显示相同组合的数量.然后在发送时订购.

这是一个非常简化的表格示例:

q3MiK.jpg

从上面的示例表中,我想要获得以下结果:

6 File Number 6 Plastic Red 9am

4 File Number 4 Plastic Red 10am

5 File Number 5 Plastic Red 10:30am

1 File Number 1 Card Blue 9am

2 File Number 2 Card Blue 9:30am

7 File Number 7 Plastic Purple 8am

3 File Number 3 Card Green 9am

因此,在材料和颜色都出现最多的地方,相应的行位于顶部,而在该行中,最早的文件位于顶部.

如您所见,红色塑料最常出现在顶部.单个文件仅按时间排序,如文件7和3所示.

理想情况下,我想在一个MYSQL查询中执行此操作,但鉴于其复杂性,我不确定是否可能.也许存储结果并遍历数组?

我几乎可以通过以下查询实现此目的:

SELECT *

FROM propellor.pro_files

GROUP BY material, colour

ORDER BY count(*) DESC,

material DESC,

colour DESC,

sent DESC;

尽管似乎订购的顺序几乎正确,但每种材料/颜色组合仅返回单行.

值得注意的是color列可以为null.

有关如何将它们分组的想法,下面是它在实践中的外观:

eEtoK.jpg

更新:材料/颜色组现在已正确排序,但是当我需要反过来的时候,单个文件从最新到最旧的顺序被排序,我尝试使用已发送的ASC / DESC进行播放,但它只影响组中的文件.

d637ad5e2976fb0ae69228857d637de1.png

更新2:这是我当前的完整MYSQL查询:

SELECT *

FROM propellor.pro_files

INNER JOIN propellor.pro_users ON propellor.pro_files.userid=propellor.pro_users.userid

INNER JOIN (

SELECT material, colour, count(*) AS occ

FROM propellor.pro_files

GROUP BY material, colour

)

AS mcCounts

USING (material, colour)

WHERE status =1 AND laser=1

ORDER BY mcCounts.occ DESC,

material,

colour,

propellor.pro_files.timesent ASC

;

解决方法:

您可以单独计算计数,尽管可以在单个查询中完成所有计算;这应该做到这一点:

SELECT pf.*

FROM propellor.pro_files AS pf

INNER JOIN (

SELECT material, colour, count(*) AS occ

FROM propellor.pro_files

GROUP BY material, colour

) AS mcCounts USING (material, colour)

ORDER BY mcCounts.occ DESC

, material, colour

, pf.sent DESC

;

编辑:当两个组合具有相同的频率时,将材料,颜色添加到ORDER BY….

标签:apache,mysql,php

来源: https://codeday.me/bug/20191119/2038797.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值