简体   繁体   English

基于SELECT限制的SELECT查询的MYSQL INSERT查询

[英]MYSQL INSERT query based on SELECT query with LIMIT restrictions

SELECT query SELECT查询

SELECT a. * , d.agent_id, COUNT( d.driver_id ) AS `noofdrivers`
                                      FROM ta_agent a, ta_drivers d
                                      WHERE a.agent_id = d.agent_id
                                      AND a.agent_id = ".$agent_id."
                                      GROUP BY a.agent_id

SELECT query returns this below records SELECT查询返回以下记录

agent_id  agent_name company_name  pricing_plan  noofdrivers
--------  ----------  -----------  ------------  -----------
    3         CCC           ZZZ          8499       2
    2         BBB           YYY          3499       3    

DRIVER DB TABLE 驱动程序表

agent_id  driver_id   driver_name
--------  ----------  -----------
2         1           EEE
2         2           FFF
2         3           GGG
1         4           HHH
3         5           III
3         6           JJJ

how do I INSERT the records based on above SELECT query results. 如何根据上述SELECT查询结果插入记录。 if pricing_plan is 3499 agent_id 2 can add only 5 drivers. 如果pricing_plan是3499, agent_id 2只能添加5个驱动程序。 Now, agent_id 2 have 3 drivers. 现在, agent_id 2具有3个驱动程序。 So, still he can add 2 drivers only. 因此,他仍然只能添加2个驱动程序。 How to do this limit restriction in mysql query? 如何在mysql查询中执行此限制限制?

Try this, 尝试这个,

insert into driver(driver_id, agent_id, driver_name)
   select ins.driver_id, ins.agent_id, ins.driver_name
   from (select 7 as driver_id, 2 as agent_id, 'KKK' as driver_name) ins
   where (select count(*) 
      from driver d, agent a
      where d.agent_id=a.agent_id and a.agent_id=ins.agent_id and a.pricing_plan=3499)<5;

In given query, you'l have to place variables $driver_id , $agent_id and $driver_name for values 7 , 2 and 'KKK' respectively. 在给定的查询,you'l必须把变量$driver_id$agent_id$driver_name为值72'KKK'分别。

so, it will look like, 因此,它看起来像

$sql="insert into driver(driver_id, agent_id, driver_name)
   select ins.driver_id, ins.agent_id, ins.driver_name
   from (select $driver_id as driver_id, $agent_id as agent_id, $driver_name as driver_name) ins
   where (select count(*) 
      from driver d, agent a
      where d.agent_id=a.agent_id and a.agent_id=ins.agent_id and a.pricing_plan=3499)<5";

Here is DEMO SQLFiddle 这是DEMO SQLFiddle

You could use something like this: 您可以使用如下形式:

insert into ta_drivers(agent_id, driver_id, driver_name) SELECT (agent_id, driver_id, driver_name) FROM dual where ((SELECT a. * , d.agent_id, COUNT( d.driver_id ) AS `noofdrivers`
                                  FROM ta_agent a, ta_drivers d
                                  WHERE a.agent_id = d.agent_id
                                  AND pricing_plan=3499 and a.agent_id = ".$agent_id."
                                  GROUP BY a.agent_id)<5);

You have to check the query because is not OK. 您必须检查查询,因为这样不行。 but in theory: 但理论上:

insert into table select from dual where ((select count(*) condition) <5);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM