2015-04-26 50 views
0

第一张表“职位”包含有关项目,可用数量和价格的信息。如何结合左连接和相减?

当某人想要购买某件商品时,系统会以最低的价格为该商品找到一个位置,并在一段时间内为其创建一个预留。

位置:

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 

在这种情况下,我想获得位置#2价格#5,因为所有来自位置#1的物品被保留。

+0

请发表您的表定义和解释短语 –

+0

Eech字段是整数,id是主键。当有人预留一个项目时,在储备表中创建一个新条目,但它只有60秒有效。之后,储备金不被考虑在内。 – Eugene

+0

好的,但是你怎么知道'reserve'表中描述了哪个项目? 'id'是否指那里的物品?或者是其他东西?你需要更清楚地解释你的问题。 –

回答

1

你的问题还不清楚,但我想你想是这样的:“考虑到其中创建小于60秒前储备”

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` 
+0

一小部分。 每个职位都有一定数量(项目)。如果头寸的储备数量等于其数量,那么结果中的这个头寸应该被忽略。 – Eugene

+0

我不完全确定这意味着什么。尝试我的编辑,看看它是否做你想要的。 –

+0

我已经更新了一个问题,能否请您更正一些答案? – Eugene