【问题标题】:MYSQL INSERT query based on SELECT query with LIMIT restrictionsMYSQL INSERT 查询基于具有 LIMIT 限制的 SELECT 查询
【发布时间】:2014-04-23 08:21:05
【问题描述】:

选择查询

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 查询返回以下记录

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

驱动程序数据库表

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

如何根据上述 SELECT 查询结果插入记录。如果 pricing_plan 是 3499 agent_id 2 只能添加 5 个驱动程序。现在,agent_id 2 有 3 个驱动程序。所以,他仍然只能添加 2 个驱动程序。如何在mysql查询中做这个限制限制?

【问题讨论】:

  • 我们应该为此使用语句级触发器吗?
  • 你想在哪里插入?哪张桌子?
  • 您能否举例说明当 (1) 代理有 X 个空格并插入 X 项?
  • @ArdiGoxhaj : 插入到 driver_table
  • @MinhD:我不知道语句级触发器。如果您有任何解决方案提供给我

标签: php mysql sql insert-select


【解决方案1】:

试试这个,

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;

在给定的查询中,您必须分别为值 72'KKK' 放置变量 $driver_id$agent_id$driver_name

所以,它看起来像,

$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";

这里是DEMO SQLFiddle

【讨论】:

  • 如何使用此查询将值插入到多个表中insert into ta_drivers(driver_id, agent_id, driver_name) insert into ta_vehicles(driver_id, vehicle_name, registration_number) select ins.driver_id, ins.agent_id, ins.driver_name, ins.driver_id, ins.vehicle_name, ins.registration_number from (select 7 as driver_id, 4 as agent_id, 'KKK' as driver_name, 'LENOVA' as vehicle_name, 'TN 05' as registration_number) as ins where (select count(*) from ta_drivers d, ta_agent a where d.agent_id=a.agent_id and a.agent_id=ins.agent_id and a.pricing_plan=1799)&lt;5;
  • 这之前没有提到。 :P 顺便说一句,您不能使用一个查询插入多个表,请检查 this
【解决方案2】:

你可以这样使用:

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);

您必须检查查询,因为不正确。但理论上:

insert into table select from dual where ((select count(*) condition) <5);
猜你喜欢
  • 1970-01-01
  • 2012-02-26
  • 2014-09-27
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
相关资源
最近更新 更多