Reputation: 13
How to make this work I'm preventing INSERT
in a loop
?
i get sql error code 1093
with this, and it's array result:
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:
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
Upvotes: 1
Views: 100
Reputation: 13
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.
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
Upvotes: 0
Reputation: 590
This restriction is documented in the MySQL manual:
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') ,.....
Upvotes: 2
Reputation: 9
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,
this should be easy
Upvotes: 0
Reputation: 1
Table design.
Make ID buyer a unique index and trap exceptions in your code.
Then you can only add id_buyer=1 once.
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
Upvotes: 0