这个问题在这里已经有答案了:
如何为mysql中的多列指定唯一约束(14个答案)
两年前关门了。
我有一个拍卖系统,其中多个用户可以出价,但我有一个问题,当出价发生在同一时间,因为他们是在数据库中输入相同的价值在数据库中 bidding_price
列,例如:
0.02
0.02
0.02
我安装了一个select,它返回给定拍卖的所有具有相同值(重复性)的出价:
SELECT bidding_price, count(*)
FROM bid_account
WHERE auction_id = 1335
GROUP BY bidding_price
Having Count(*) > 1
在这种情况下,他将返回身份证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 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秒。
2条答案
按热度按时间esbemjvw1#
我认为您可以在sql端通过给该列一个“惟一”选项来解决这个问题。
你可以在这里阅读更多-mysql-unique
编辑:
我知道你有多个出价值,但不同的拍卖。您可以基于另一列将列指定为唯一的—这意味着它将允许多个相同的值,但如果相同的“其他列”相同,则不允许。
在这里阅读更多-如何为mysql中的多个列指定唯一约束?
5lhxktic2#
如果您使用的是数据库,您可以尝试使用您的出价金额唯一