2015-04-26 80 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