我有一些表格叫做 orders
& notifications
. 当管理员更新任何订单状态时,那么它将被存储在 notifications
桌子和 orders
桌子的 updated_at
的值被更新(显示在顶部)。
这是我的表格。
orders:
id, order_number, ..., updated_at
notifications:
id, order_id, order_status, remarks
在 orders
我需要在页面上显示最新的订单。order_status
& remarks
.
SELECT
`orders`.`token`,
`orders`.`order_number`,
`orders`.`order_date`, (
SELECT SUM(`mrp` * `quantity`) FROM `order_items`
WHERE `order_id` = `orders`.`id`
) AS `total`, (
SELECT `order_status` FROM `notifications`
WHERE `order_id` = `orders`.`id`
ORDER BY `id` DESC
LIMIT 0, 1
) AS `status`
FROM `orders`
WHERE `orders`.`company_id` = 1
AND `orders`.`user_id` = 5
GROUP BY `orders`.`id`
ORDER BY `orders`.`updated_at` DESC
该 sub-query
只能返回1列。有没有办法让 order_stat
&amp。remarks
在单个查询中。我的意思是不添加任何其他子查询或在循环中打另一个查询。
单个子查询可以用JOIN这样的方式。
SELECT
`orders`.`token`,
`orders`.`order_number`,
`orders`.`order_date`,
(
SELECT SUM(`mrp` * `quantity`)
FROM `order_items`
WHERE `order_id` = `orders`.`id`
) AS `total`,
`notifications`.`order_status`,
`notifications`.`remarks`,
FROM `orders`
LEFT JOIN `notifications` ON `notifications`.`id`=(SELECT MAX(`id`) FROM `notifications` WHERE `order_id`=`orders`.`id`)
WHERE `orders`.`company_id` = 1
AND `orders`.`user_id` = 5
GROUP BY `orders`.`id`
ORDER BY `orders`.`updated_at` DESC
但说实话,我不知道它的性能是否更好。我建议使用以下两个版本进行调试 EXPLAIN