第一个表“Positions”包含有关商品、可用数量和价格的信息。
当有人想要购买某件商品时,系统会找到该商品价格最低的位置,并为其创建一段时间的储备。
职位:
id item amount price seller
1 1 1 4 1
2 1 2 5 2
储备:
id position created_at
1 1 1430060037
如果另一个客户想要购买相同的商品,则只有第二个位置可供他使用,因为第一个位置只有一个商品(数量),并且该商品已被提前预订。但如果 Reserve#1 已过期,客户可以从第一个位置以该价格购买商品。
更新:
职位:
id item amount price
1 1 2 4
2 1 2 5
3 1 2 6
储备:
id position created_at
1 1 1430060037
1 1 1430060038
在本例中,我想获取位置#2 和价格#5,因为位置#1 中的所有项目都被保留。
最佳答案
你的问题不清楚,但我认为你想要这样的东西:
SELECT
`positions`.`amount`,
MIN(`price`) AS `min_price`,
COUNT(`reserves`.`id`) AS `reserve_count`
FROM `positions`
LEFT JOIN `reserves` on `positions`.`id` = `reserves`.`position`
WHERE `positions`.`item` = 1234 -- specify the item here
AND `created_at` >= NOW() - INTERVAL 60 SECOND
GROUP BY `reserves`.`position`
HAVING `reserve_count` != `amount`
关于mysql - 如何结合左连接和减法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29878779/