[英]how can i find the count of occurrences of multiple dates in my mysql table within a date range in php.
[英]How to count occurrences between multiple dates and list only unique rows from MySQL?
我已经找到了答案,但是还没有找到合适的解决方案。 我有一个带有“数据”表的数据库,其中列出了所有产品及其有效期。 不同产品的总数大约为120,但是“数据”表有5000多个行。 每个产品都有多个单独的,受过期监控的单元。
我需要列出所有独特的产品,并在其中列出每年的失效日期。 目前,我在主查询的迭代中每年都运行多个其他查询,以计算两个日期之间的到期日期的发生。
CREATE TABLE IF NOT EXISTS `data` (
`EXPIRY` date DEFAULT NULL,
`RNO` int(6) DEFAULT NULL,
`PRODID` int(3) DEFAULT NULL,
`NAME` varchar(38) DEFAULT NULL,
`RND` varchar(2) DEFAULT NULL,
`RDY` varchar(3) DEFAULT NULL,
`ARTY` varchar(3) DEFAULT NULL,
`ARYK` varchar(4) DEFAULT NULL,
`BATCH` varchar(16) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
// list all unique product rows
$main_loop = $database->query('SELECT * FROM data GROUP BY rno HAVING COUNT(*) >=1');
$rows = $database->resultset($main_loop);
foreach($rows as $data) {
echo "<tr>";
echo "<td>".$data['RNO']."</td>";
<td>
// another query to count occurrences of expiry in each product between two dates
$thisrno = $data['RNO'];
$database->query("SELECT * FROM data WHERE EXP BETWEEN '2016-01-01' AND '2016-12-31' AND RNO = '$thisrno'");
$database->execute();
$rows = $database->rowCount();
echo $rows;
echo "</td><td>";
...i would need to do this for each column (2016-2025)
...
}
我相信有更好的解决方案。 问题还在于,这种方式我无法按每年的过期单位数对表格进行排序,因此效率不是很高。
结果应为:
RNO | NAME | Expiring in 2016 | Expiring in 2017 | ...
336540 | Prod_name_1 | 34 | 62 |
391755 | Prod_name_2 | 2 | 116 |
653112 | Prod_name_3 | 46 | 7 |
似乎很简单:
select rno, name,
sum(exp between '2016-01-01' and '2016-12-31') as exp2016,
sum(exp between '2017-01-01' and '2017-12-31') as exp2017,
sum(exp between '2018-01-01' and '2018-12-31') as exp2018,
sum(exp between '2019-01-01' and '2019-12-31') as exp2019,
sum(exp between '2020-01-01' and '2020-12-31') as exp2020,
sum(exp between '2021-01-01' and '2021-12-31') as exp2021,
sum(exp between '2022-01-01' and '2022-12-31') as exp2022,
sum(exp between '2023-01-01' and '2023-12-31') as exp2023,
sum(exp between '2024-01-01' and '2024-12-31') as exp2024,
sum(exp between '2025-01-01' and '2025-12-31') as exp2025
from data
where exp between '2016-01-01' and '2025-12-31'
group by rno;
如果要包括那些年份中没有到期的产品,请忽略where子句。
我不确定您的问题是关于排序; 您可以选择一年,然后按该年的到期次数对行进行排序,但这似乎有些奇怪。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.