Запрос MYSQL INSERT на основе запроса SELECT с ограничениями LIMIT

ВЫБЕРИТЕ запрос

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?


person Karuppiah RK    schedule 23.04.2014    source источник
comment
Должны ли мы использовать для этого триггер уровня оператора?   -  person MinhD    schedule 23.04.2014
comment
Куда вы хотите вставить? какой стол?   -  person Ardi Goxhaj    schedule 23.04.2014
comment
Можете ли вы привести примеры того, что вы хотели бы получить, когда (1) агент имеет X пустых мест и вставляет ‹X элементов, (2) X пустых мест и вставляет X элементов, (3) X пустых мест и вставляет ›X элементов?   -  person Daniel Renshaw    schedule 23.04.2014
comment
@ArdiGoxhaj: ВСТАВЬТЕ в таблицу driver_table   -  person Karuppiah RK    schedule 23.04.2014
comment
@MinhD: я не знаю о триггере уровня оператора. если у вас есть какое-либо решение, дайте мне   -  person Karuppiah RK    schedule 23.04.2014
comment
@DanielRenshaw: например: у агента 2 есть 3 водителя, а тарифный план агента 2 - 3499. Если тарифный план 3499, агент 2 может добавить только 5 водителей. если он добавит 6-й драйвер, он не будет вставлен в базу данных. некоторое предупреждение будет показано пользователю. понятно ?   -  person Karuppiah RK    schedule 23.04.2014
comment
Это может помочь. В этом случае пользователь хочет ограничить систему бронирования гостиничных номеров. Минимум 3 и максимум 5 человек могут забронировать 1 номер.   -  person MinhD    schedule 23.04.2014


Ответы (2)


Попробуй это,

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;

В данном запросе вам нужно поместить переменные $driver_id, $agent_id и $driver_name для значений 7, 2 и 'KKK' соответственно.

Итак, это будет выглядеть так,

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

Вот ДЕМО SQLFiddle

person Ravi Dhoriya ツ    schedule 23.04.2014
comment
как вставить значения в несколько таблиц с помощью этого запроса 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)<5; - person Karuppiah RK; 23.04.2014
comment
Об этом раньше не упоминалось. : P Кстати, вы не можете вставлять в несколько таблиц с помощью одного запроса, проверьте this< /а> - person Ravi Dhoriya ツ; 23.04.2014

Вы можете использовать что-то вроде этого:

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);
person Ardi Goxhaj    schedule 23.04.2014
comment
вы можете проверить: stackoverflow.com/questions/18584541/ или stackoverflow.com/questions/18728058/ - person Ardi Goxhaj; 23.04.2014