Search code examples
phpmysqlsqlinsert-select

MYSQL INSERT query based on SELECT query with LIMIT restrictions


SELECT query

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

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. if pricing_plan is 3499 agent_id 2 can add only 5 drivers. Now, agent_id 2 have 3 drivers. So, still he can add 2 drivers only. How to do this limit restriction in mysql query?


Solution

  • 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.

    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