我有一个拍卖系统,其中有多个用户可以出价,但是当我们在bidding_price
列中使用相同值输入数据库的同时出价时,我遇到了问题,例如:
0.02
0.02
0.02
我已经安装了一个选择,该选择返回给定拍卖的所有具有相等值(双重性)的出价:
SELECT bidding_price, count(*)
FROM bid_account
WHERE auction_id = 1335
GROUP BY bidding_price
Having Count(*) > 1
在这种情况下,他将返回ID为1335的拍卖副本。
bid_account
表的结构如下所示:
id | int(255) - index - primary - AUTO INCREMENT
auction_id | int(11) - id of auction
bidding_price | float(20,2) - bid amount, eg. 0.02
我甚至创建了一个可以删除重复内容的DELETE,但是由于系统错误而导致某个用户删除了出价是不公平的。遵循:
DELETE ba
FROM bid_account ba JOIN
(SELECT ba2.auction_id, ba2.bidding_price, MAX(ba2.id) as max_id
FROM bid_account ba2
WHERE ba2.auction_id = ?
GROUP BY ba2.auction_id, ba2.bidding_price
) ba2
ON ba2.auction_id = ba.auction_id AND
ba2.bidding_price = ba.bidding_price AND
ba2.max_id > ba.id
WHERE ba.auction_id = ?;
是否有“?
”,因为它通过参数接收值。
有没有人知道我如何解决这个问题,避免bidding_price
表格中的相等价值,但对于auction_id
列标识的特定拍卖?
在表格中,bidding_price
中有几个相等的值,但不能发生的是相同拍卖的相等值,即auction_id
中的相同值。
我想过创建一个更新,它会预先检查是否存在重复项,如果存在重复项,则会通过在每个重复项中插入1美分来更新值。但我认为,当同时有3个出价时,它会远离问题。
此SQL命令将在节点上运行,并且每秒都会在cron中运行,也就是说,每次执行此检查时。如果现在有重复出价,则下一秒将识别并修复。
投标系统与15秒倒计时器一起使用,当有人出价时,计时器返回其初始计数15秒。
答案 0 :(得分:0)
我认为你可以通过给那个列一个" UNIQUE"来解决这个问题。选项。
您可以在此处阅读更多内容 - Mysql - UNIQUE
编辑:
我知道您有多个出价值,但适用于不同的拍卖。 您可以根据另一列将列指定为UNIQUE - 这意味着它将允许多个相同的值,但如果相同的"其他列"是完全相同的。
在此处阅读更多内容 - How do I specify unique constraint for multiple columns in MySQL?
答案 1 :(得分:0)
如果您使用的是数据库,则可以尝试使用bid_amount的唯一
CREATE TABLE bidding system (
bid_amount int NOT NULL UNIQUE,
LastName varchar(15) NOT NULL,
FirstName varchar(15)
);