获取按月顺序显示的特定日期之间的所有订单

Posted

技术标签:

【中文标题】获取按月顺序显示的特定日期之间的所有订单【英文标题】:Get all orders between specific date shown in order of months 【发布时间】:2021-08-06 17:12:29 【问题描述】:

我有一张带有优惠券代码的表格,上面有创建时的时间戳

该表的基本内容如下所示:

`coupon_codes`
- coupon_id
- timestamp
- account_id

然后有一个订单表,其中有一行名为coupon_id,因此我可以看到何时下订单,使用了特定的优惠券代码。该表如下所示:

`orders`
- order_id
- timestamp
- account_id
- coupon_id

现在我想显示所有从创建(时间戳)下的带有特定优惠券代码的订单。每年和每月对它们进行分组。像这样:

2021
- Jan
-- Order
-- Order
-- Order
- Feb
-- Order
- Mar
-- Order

2020
- Jan
-- Order
-- Order
-- Order
- Feb
- Mar
-- Order
-- Order
-- Order

Etc

我该怎么做?

我尝试了以下方法:

<?php
$getkortingstartdate = '
SELECT * FROM coupon_codes WHERE account_id = "'.$conn->real_escape_string($_GET['account_id']).'"';
$getkortingstartdatecon = $conn->query($getkortingstartdate);
$getkortingstartdate = $getkortingstartdatecon->fetch_assoc();
$date1 = strtotime($getkortingstartdate['timestamp']);
$date2 = strtotime('today');

while ($date1 <= $date2) 
  $years = date('Y', $date1) . "<br>";
  echo $years;
  echo date('Y-m', $date1) . "<br>";
  $date1 = strtotime('+1 month', $date1);
  $months = array("Jan", "Feb", "Mar", "Apr", "May","Jun","Jul","Aug","Sep","Okt","Nov","Dec");
  foreach ($months as $month) 
    $maand = date('m',strtotime($month));
    $monthandyear = $maand."-".$years;
    echo $monthandyear;
  

【问题讨论】:

1) 开始使用准备好的语句,因为现在您对 SQL 注入非常开放 2) 研究在循环中正确使用 fetch_assoc()。 3)在查询中使用ORDER BY按时间戳排序 【参考方案1】:

我认为您可以选择所有这样的订单:

SELECT *
FROM orders
WHERE coupon_id IN (SELECT coupon_id FROM coupon_codes WHERE account_id = "XXX")
ORDER BY timestamp

(转义 cmets 中提到的 account_id 参数)

所以这样它应该已经按订单日期排序了。然后,您可以根据行的时间戳和订单数据,遍历结果并输出年份和月份。

【讨论】:

以上是关于获取按月顺序显示的特定日期之间的所有订单的主要内容,如果未能解决你的问题,请参考以下文章

如何按月顺序对我的数据进行排序?我希望我的月订单是 4 月到 4 月(即财政年度)

按月/年分组 FechedResults 以显示带有部分的 swiftui 列表

DataTable 日期排序问题

创建 PHP 数组,其中包含从 SQL 中按月提取的日期和订单数

以准确的 MAX 顺序获取特定时间戳之间具有 MAX 值的记录

使用比较器按特定顺序对对象列表进行排序