铁杆 SQLers 的好拼图。
2张桌子:拍卖和出价。
CREATE TABLE auctions
(
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
created_at INT,
timer INT DEFAULT 10,
user_id BIGINT UNSIGNED
)ENGINE=InnoDB;
CREATE TABLE bids
(
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
created_at INT,
user_id BIGINT UNSIGNED,
auction_id BIGINT UNSIGNED
)ENGINE=InnoDB;
给定拍卖,如果满足以下条件之一,用户可以对其出价:
- 上次出价的创建时间少于 auction.timer 秒前
- 拍卖没有出价
简而言之:这是一个在 x 秒内没有任何人关注的最后一个出价用户赢得拍卖的游戏。
这里不允许交易。
这是我的尝试:
INSERT INTO bids (user_id, auction_id)
SELECT 1, a.id
FROM auctions AS a, bids AS b
WHERE a.id = b.auction_id
AND a.user_id IS NULL
AND a.id = 1
AND (UNIX_TIMESTAMP() - b.created_at) < a.timer
LIMIT 1
它有效,但我不知道如何将“或给定拍卖 ID 不存在出价”逻辑放入其中。