这可能是一个复杂的问题,我很喜欢,我已经敲了好几天头没有解决方案,甚至谷歌也没有找到我的答案。在 opencart 中,您在数据库中有一个名为“order_totals”的表,其结构如下:默认情况下,Opencart 带有一个模型函数,它根据订单 ID 返回订单总计,假设 order_id = '1'public function getOrderTotals($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "' ORDER BY sort_order"); return $query->rows;}因此,如果您将该函数与数据库的附加图像进行比较,它应该返回 4 项“小计、运费、付款、总计”,这在查看时很清楚,order_id并且order_total_id我的问题是我如何能够value具体code地在视图表中分别列出它们,如下所示通常情况下,我们可以添加过滤代码的SQL查询返回被请求的值。例如,如果我想要value的code shipping,我可以使用下面的代码:public function getOrderTotals($order_id) { $query = $this->db->query("SELECT value FROM " . DB_PREFIX . "order_total WHERE code = 'shipping' AND order_id = '" . (int)$order_id . "' ORDER BY sort_order"); return $query->rows;}如果我们示例的订单 id 为 1,这将返回 Shipping 所需的值数组(1){[0]=>数组(1){[“值”]=>字符串(6)“5.0000”}}这很好,但是要获得运输、小计、付款和总计的价值,我需要创建多个分开的功能,我认为这不是一个有效的解决方案。如何分别获取value每个code并在管理视图仪表板中列出它们?
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
您可以使用条件聚合直接使用 SQL 生成预期结果。
考虑:
SELECT
order_id,
MAX(CASE WHEN code = 'sub_total' THEN value END) sub_total,
MAX(CASE WHEN code = 'shipping' THEN value END) flat_shipping_rate,
MAX(CASE WHEN code = 'payment_based_fee' THEN value END) payment,
MAX(CASE WHEN code = 'total' THEN value END) total
FROM order_totals
GROUP BY order_id
如果您需要过滤特定的order_id,您可以在查询中添加一个WHERE子句。
- 1 回答
- 0 关注
- 137 浏览
添加回答
举报
0/150
提交
取消