我有一个包含多个订单的表,当订单状态更新时,它会创建一个新记录,因此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/