09/10/2018, 22:40
PHP-Làm sao insert 2 table cùng lúc vô mysql!
mình có 2 table như sau:
+=================+
category: cat_id, name
article : article_id, cat_id, volume, name
volume : volume_id, article_id, content
+=================+
Bình thường mình làm như sau :
insert một bài (article) vô mysql và cũng cùng quá trình đó mình lại select lại dòng mà vừa thực hiện insert ở trên để lấy article_id sau đó insert tiếp volume cùng với article_id vừa lấy được, vì ở đây mình muốn nói là một bài viết article thi có nhiều volume.
Không biết cách này có tối ưu không vì thấy mysql làm việc cực quá liệu có cách nào hiệu quả hơn chăng.
+=================+
category: cat_id, name
article : article_id, cat_id, volume, name
volume : volume_id, article_id, content
+=================+
Bình thường mình làm như sau :
insert một bài (article) vô mysql và cũng cùng quá trình đó mình lại select lại dòng mà vừa thực hiện insert ở trên để lấy article_id sau đó insert tiếp volume cùng với article_id vừa lấy được, vì ở đây mình muốn nói là một bài viết article thi có nhiều volume.
Không biết cách này có tối ưu không vì thấy mysql làm việc cực quá liệu có cách nào hiệu quả hơn chăng.
Bài liên quan
Tuy nhiên trong MySql có hàm LAST_INSERT_ID(); bạn có thể dùng để lấy giá trị article_id mà bạn vừa insert vào khỏi phải dùng lệnh select. Bạn tham khảo thêm help cũa MySQL để rõ hơn về LAST_INSERT_ID();
mysql_query("INSERT INTO article (cat_id,volume,name) VALUES ($cat_id,$volume,$name)");
$r=mysql_query("SELECT article_id FROM article WHERE (cat_id=$cat_id) AND (volume=$volume)AND (name=$name)");
$r=mysql_fetch_row($r);
mysql_query("INSERT INTO volume VALUES ($volume_id,".$r[0].",$content)");
nếu dùng mysql_insert_id:
mysql_query("INSERT INTO article (cat_id,volume,name) VALUES ($cat_id,$volume,$name)");
mysql_query("INSERT INTO volume VALUES ($volume_id,".mysql_insert_id().",$content)");
Nếu dùng LAST_INSERT_ID() thì
mysql_query("INSERT INTO article (cat_id,volume,name) VALUES ($cat_id,$volume,$name)");
mysql_query("INSERT INTO volume VALUES ($volume_id,last_insert_id(),$content)");
Bạn chạy thử xem không biết có đúng không