gpt4 book ai didi

MySQL - 有条件地插入多个值

转载 作者:行者123 更新时间:2023-11-29 08:00:40 26 4
gpt4 key购买 nike

好的,所以我有一个可以对游戏进行投注的 table 。
该表包含以下列:user_id、event_id、bet。
用户可以在一个请求中将他/她的(多个)赌注发送到服务器。

  • 我需要使用一个查询插入多个投注,同时检查是否没有任何投注正在参加已经开始/结束的事件。
  • 如果至少有 1 个开始/结束的事件,我并不关心整个查询是否取消,或者只是忽略“不合格”的投注。

问题
如何使用一个查询插入多个投注(行),同时根据 select 语句(检查每个事件的状态)调整插入?

如果它有效的话,我会使用以下查询(当然它不会):

INSERT INTO bet_on_event (user_id, event_id, bet)
VALUES (1,5,1), (1,6,2)
IF (SELECT COUNT(*) FROM events WHERE _id IN(5,6) AND status=0) = ?;

说明
1. 如前所述,这些值是预先设定的 - 由用户请求。
2. 游戏/事件有状态。 0表示比赛尚未开始,可以投注。
3. select语句只统计有多少个请求的事件的状态为0。
4.“IF”应检查(3)中的计数是否等于用户请求投注的赛事数量,从而确认所有赛事都可以投注。

“IF”应该替换为有效的内容,如果您对我想要实现的目标有更好的想法,则可以替换整个语句。

一个更简单的查询(这对于我的情况来说不够,但适用于 1 行)是:

INSERT INTO bet_on_event (user_id, event_id, bet)
SELECT 1,5,1 FROM dual
WHERE (SELECT COUNT(*) FROM events WHERE _id IN(5,6) AND status=0) = ?;

有什么想法吗?这可能吗?投注会被大量使用,所以我想尽快完成 - 通过 1 个查询。
非常感谢。

编辑
这就是我最终所做的,取自 Thorsten 的答案(我将其更改为动态构建的查询,因为这就是我需要的):

var query='INSERT INTO bet_on_event (user_id, event_id, bet)';

for(var i=0; i<eventIds.length; i++){
query+= ' SELECT ' + userId + ',' + eventIds[i] + ',' + bets[i]
+ ' FROM dual WHERE EXISTS (SELECT * FROM events WHERE id = ' + eventIds[i]
+ ' AND Status = 0)';
if(i < eventIds.length - 1){
query += ' UNION ALL';
}
}

其中 eventId 和赌注按相应顺序排列(如 map )

编辑2
我还想更新已经存在的赌注(如果用户想要......)。因此需要用数组中的相关赌注更新每一行。这是解决方案:

ON DUPLICATE KEY UPDATE bet=VALUES(bet)  

刚刚添加(连接)到查询末尾...

最佳答案

这对你有用吗?如果 id 5 没有已开始的事件,则会插入 1,5,1。 1,6,1 和 id 6 相同。

INSERT INTO bet_on_event (user_id, event_id, bet)
SELECT 1,5,1 FROM dual WHERE NOT EXISTS
(SELECT * FROM events WHERE _id = 5 AND Status <> 0)
UNION ALL
SELECT 1,6,1 FROM dual WHERE NOT EXISTS
(SELECT * FROM events WHERE _id = 6 AND Status <> 0);

编辑:如果您不想在一个或多个游戏开始时插入任何内容,您可以简单地替换 WHERE _id = 5WHERE _id = 6WHERE _id IN (5,6) 。或者只有一个存在子句:

INSERT INTO bet_on_event (user_id, event_id, bet)
SELECT *
FROM
(
SELECT 1,5,1 FROM dual
UNION ALL
SELECT 1,6,1 FROM dual
) tmp
WHERE NOT EXISTS (SELECT * FROM events WHERE _id IN (5,6) AND Status <> 0);

关于MySQL - 有条件地插入多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23909787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com