简体   繁体   English

mysql插入值选择不存在

[英]mysql insert values select not exist

How to make this work I'm preventing INSERT in a loop ? 如何使此工作阻止loop INSERT i get sql error code 1093 with this, and it's array result: 我得到这个sql error code 1093 ,它的数组结果:

INSERT INTO kelengkapan_berkas (id_buyer, nama_berkas) VALUES

('1', (SELECT jenis_berkas.nama_berkas FROM jenis_berkas WHERE id_job = '1' AND NOT EXISTS (SELECT id_buyer FROM kelengkapan_berkas WHERE id_buyer = '1'))),

('2', (SELECT jenis_berkas.nama_berkas FROM jenis_berkas WHERE id_job = '1' AND NOT EXISTS (SELECT id_buyer FROM kelengkapan_berkas WHERE id_buyer = '2'))),

('3', (SELECT jenis_berkas.nama_berkas FROM jenis_berkas WHERE id_job = '1' AND NOT EXISTS (SELECT id_buyer FROM kelengkapan_berkas WHERE id_buyer = '3')))

My looping code work but i need to avoid because of the connection storming XD: 我的循环代码有效,但是由于连接风暴XD,我需要避免:

    while($rows=mysqli_fetch_array($res)){
    $sql="INSERT INTO kelengkapan_berkas 
               (id_buyer, nama_berkas) 
          SELECT    '$rows[id]', 
              jenis_berkas.nama_berkas 
          FROM jenis_berkas 
          WHERE id_job = '$rows[job]' AND NOT EXISTS 
             (SELECT * FROM kelengkapan_berkas WHERE id_buyer = '$rows[id]')";
    $result=mysqli_query($con,$sql);}

or any idea to do this with trigger or procedure? 或使用触发器或过程来执行此操作的任何想法? thx 谢谢

This restriction is documented in the MySQL manual : MySQL手册中记录了此限制:

Currently, you cannot update a table and select from the same table in a subquery.

As a workaround, you can wrap the sub-query in another sub-query(Nested) and avoid that error. 解决方法是,可以将子查询包装在另一个子查询(嵌套)中,避免出现该错误。

INSERT INTO kelengkapan_berkas (id_buyer, nama_berkas) VALUES 
('1', (SELECT NAME (SELECT jenis_berkas.nama_berkas NAME FROM jenis_berkas WHERE id_job = '1') ,.....

Table design. 表设计。

Make ID buyer a unique index and trap exceptions in your code. 使ID购买者成为唯一索引,并在代码中捕获异常。

Then you can only add id_buyer=1 once. 然后,您只能添加一次id_buyer = 1。

If you really don't want to fail: 如果您真的不想失败:

select count(*) as num where id_buyer=1
#get num into your code
if(num==0) 
  insert

step 1: select the records from the db, and then constructed into array, step 2: finally you can do insert query from above selected records, 步骤1:从数据库中选择记录,然后构建为数组,步骤2:最后,您可以从上面选择的记录中插入查询,

this should be easy 这应该很容易

Sorry guys I'm new in this stuff but actually the point is I want to make sure all new record will be inserted to new table, using php is a bit hard n causing looping that cause slow down so I do trigger with MySQL and the result is the same with what I want. 抱歉,我是新手,但实际上,我想确保所有新记录都将插入到新表中,使用php有点困难n会导致循环变慢,所以我确实使用MySQL和结果和我想要的一样。

DELIMITER |

CREATE DEFINER = 'root'@'localhost' TRIGGER `copy_berkas`
AFTER INSERT
ON `buyer`
FOR EACH ROW
INSERT INTO kelengkapan_berkas 
(id_buyer, nama_berkas) 
SELECT NEW.id, jenis_berkas.nama_berkas 
FROM jenis_berkas WHERE jenis_berkas.id_job = NEW.job|

DELIMITER ;

Sorry for the Trouble 抱歉,添麻烦了

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

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