我有一个包含多个订单的表,当订单状态更新时,它会创建一个新记录,因此1个订单可能由于状态不同而具有多个记录。

我有一个管理面板,管理员可以在其中显然看到所有订单,但是我不想为每个记录显示每个更新,因为这很容易失控。因此,我想获得每个订单的最新记录。因此,如果我有7条订单号为100的记录,我想显示订单号为100的最新更新。我希望每个订单都像这样。

我有一些在线阅读并尝试了解MySQL Group By,因为我相信这是实现我想要的最好的方法,但是我似乎无法正常工作,我不断收到一条消息,指出存在错误与我的SQL语句

$query = '(SELECT * FROM orders
           WHERE `order_status` != "Order Complete"
           ORDER BY `order_update` DESC
           GROUP BY `order_number`)';
$orderList = $conn->query($query);


这是我得到的错误
您的SQL语法有误。检查与您的MySQL服务器版本相对应的手册,以在'GROUP BY order_number附近使用正确的语法

我应该提供我的列结构。所以我有一个ID列,一个Order Number列,一个Order Status列,最后是一个Order Date列。因此,我确定最新状态的方法是采用“订购日期”(设置为时间戳)。

编辑
我想实现我提出的问题,但这是一个循环。我循环浏览并将其全部显示在表内,因此可能有100个不同的订单,这意味着100个不同的订单号,但是我只想显示每个订单的最新状态,我可以使用“订单日期”列来确定这些状态。我也在用PHP来构建/执行查询

最佳答案

首先,如上面的注释中所提到的,您对错误问题有一个答案,GROUP BY始终位于ORDER BY之前。

其次,我们需要有关您的列的更多数据吗?也许您有订单的时间和日期?您如何确定最新的顺序?

这些东西怎么样

$query = '(SELECT DISTINCT id, order_number, order_status, MAX(order_date)
           FROM orders
           WHERE `order_status` != "Order Complete"
           ORDER BY `order_update` DESC, MAX(order_date)';
$orderList = $conn->query($query);


只是将其编辑为PHP语法,因为我不熟悉它

关于php - 如何创建GROUP BY SQL语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56649994/

10-12 12:41
查看更多