第一个表“职位”包含有关项目,可用金额和价格的信息。
当有人想要购买物品时,系统会找到价格最低的物品的仓位,并在一段时间内为其创建储备。
位置:
id item amount price seller
1 1 1 4 1
2 1 2 5 2
储量:
id position created_at
1 1 1430060037
如果另一个客户想要购买相同的商品,则只有第二个位置可供他使用,因为第一个位置只有一个商品(金额)且该商品已提前预订。但是如果保留#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
在这种情况下,我想获得价格为#5的位置#2,因为位置#1的所有项目都是保留的。
答案 0 :(得分: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`