如果相等,则插入mysql
我的桌子像: 水平仪 id:主键 订单:整数 计划 id:主键 级别:外键级别 极限:整数 请求: id:主键 计划id:外键计划 当有一个请求时,将数据保存到请求表中,然后计算所有请求并与表计划中的限制进行比较。如果相等,则我将数据插入到表格级别中的表格计划中,其级别\u id=订单的级别\u id+1,否则不执行任何操作。我用多个单查询实现它,但现在我想在单查询中优化它。这可能吗?提前感谢 第一:如果相等,则插入mysql,mysql,sql,Mysql,Sql,我的桌子像: 水平仪 id:主键 订单:整数 计划 id:主键 级别:外键级别 极限:整数 请求: id:主键 计划id:外键计划 当有一个请求时,将数据保存到请求表中,然后计算所有请求并与表计划中的限制进行比较。如果相等,则我将数据插入到表格级别中的表格计划中,其级别\u id=订单的级别\u id+1,否则不执行任何操作。我用多个单查询实现它,但现在我想在单查询中优化它。这可能吗?提前感谢 第一: INSERT INTO request(plan_id) SELECT id FROM PLA
INSERT INTO request(plan_id) SELECT id FROM PLAN WHERE ...
下一步:
如果A=B,我将使用php进行比较
INSERT INTO plan (level_id, order) SELECT id, order FROM level WHERE ..
否则
注意要做的事我并不真正理解你所做的事情的逻辑,但是为了回答你的问题,你可以将你当前作为A和B的查询移动到insert中的子查询中。比如:
INSERT INTO plan (level_id, order)
SELECT id, order
FROM level
WHERE {existing where logic here}
AND (
SELECT COUNT(request.id) FROM request
WHERE request.plan_id = ...
) = (
SELECT limit FROM plan
WHERE ...
)
如果子查询彼此不相等,那么insert将什么也做不了。我不太理解您所做的逻辑,但是为了回答您的问题,您可以将当前作为A和B查询的内容移动到insert中的子查询中。比如:
INSERT INTO plan (level_id, order)
SELECT id, order
FROM level
WHERE {existing where logic here}
AND (
SELECT COUNT(request.id) FROM request
WHERE request.plan_id = ...
) = (
SELECT limit FROM plan
WHERE ...
)
如果子查询彼此不相等,那么插入就没有任何作用。我认为最好通过编写一个触发器来处理更新,该触发器监视表上的插入请求,如下所示: 为每行请求插入后创建触发器级别\u触发器 new here表示请求中新插入的行 @A:=从请求中选择COUNTrequest.id,其中request.plan\u id=new.plan\u id @B:=从计划中选择限额,其中plan.id=new.plan\u id 如果@A=@B那么 无论您的insert查询是什么。对此我不是很清楚。 插入到计划级别\u id,订单选择id,订单从何处开始。。
如果结束 我认为最好通过编写一个触发器来处理更新,该触发器监视表请求上的插入,如下所示: 为每行请求插入后创建触发器级别\u触发器 new here表示请求中新插入的行 @A:=从请求中选择COUNTrequest.id,其中request.plan\u id=new.plan\u id @B:=从计划中选择限额,其中plan.id=new.plan\u id 如果@A=@B那么 无论您的insert查询是什么。对此我不是很清楚。 插入到计划级别\u id,订单选择id,订单从何处开始。。
如果结束;我不太明白这些要求。为什么不包括你现有的查询,这样我们就可以看到逻辑?@Ben我现在在街上,所以我不能包括我的查询,但我写了一个关于我的逻辑的查询示例。你们能帮我吗?请提供表格中的数据和期望的输出,以便更好地理解。我想你可以用CTE来实现这一点。我不太理解这些要求。为什么不包括你现有的查询,这样我们就可以看到逻辑?@Ben我现在在街上,所以我不能包括我的查询,但我写了一个关于我的逻辑的查询示例。你们能帮我吗?请提供表格中的数据和期望的输出,以便更好地理解。我认为你可以通过CTE来实现这一点。