仅当select count> n时,mysql查询才会插入

问题描述 投票:0回答:1

我有2个查询:

SELECT COUNT(*) FROM a WHERE id = 1
//if row == 1
INSERT INTO a VALUES(fielda) VALUES('value')

有没有办法将这两个查询合并为一个?我试过'IF(count> 0,..)'和类似,但查询不正确。这涉及在表中插入新记录,注意不要超过每个字段的预设数量的记录。理论上它应该类似于INSERT IF ...

编辑:

@Barmar我试过但我觉得我不明白你写的是什么(事实上我在查询中犯了一个错误),我试着这样回答:

THE QUERY AFTER YOUR RESPONSE:
INSERT INTO table1 SELECT MAX(id) FROM table1 WHERE field1 = (SELECT id from a WHERE f = field2) HAVING COUNT(*) = 1 (all fields request) VALUES (all values request)

//field1 = id from table2
//field2 = id from another table: associative value

//ORIGINAL QUERY
//FIRST COUNT:
SELECT COUNT(*) from table1 WHERE field1 = (SELECT id FROM table2 WHERE f = field2)
//AFTER THE INSERT:
INSERT INTO table1 (all fields request) VALUES (all values request)

我想到这个例子我试图告诉你:

TABLE PLAYER:fields(ID,TEAMID,NAME)=>(id = int,teamid = int与表团队关联,name = varchar)

TABLE TEAM:fields(ID NAME)=>(id = int,name = varchar)

假设一个团队中的玩家最多20个,所以你希望玩家表中最多20个记录与同一个teamid值相关联,或者至少这是我们人类的想法,因为对于计算机也可以是无限的。我一直在寻找一种方法,只允许插入实际上允许插入记录的情况,在这种情况下,条件是在播放器表中每个团队少于21个记录。

mysql mysqli pdo insert
1个回答
2
投票

您可以使用INSERT ... SELECT,并将条件放在SELECT查询中。

INSERT INTO player (teamid, name)
SELECT @teamid, @playername
FROM DUAL
WHERE (SELECT COUNT(*) FROM player
        WHERE teamid = @teamid) < 20

当您需要选择文字数据时,DUAL是一个虚拟表,但需要在查询中包含其他子句。

© www.soinside.com 2019 - 2024. All rights reserved.