PDA

View Full Version : PHP-Làm sao insert 2 table cùng lúc vô mysql!



php&mysql
22-04-2005, 15:08
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.

ohyesssvn
22-04-2005, 19:11
Mình thấy trong box VB cũng có bài tương tự http://ddth.com/showthread.htm?t=65309, bạn tham khảo thử

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();

tdhoang
23-04-2005, 10:52
nếu dùng php, thử dùng mysql_insert_id()

ohyesssvn
23-04-2005, 11:23
Theo mình thì dùng last_insert_id() vẫn nhanh hơn là dùng mysql_insert_id()

Violon
23-04-2005, 13:10
theo mình cách tốt nhất là dùng 2 câu insert bạn à?

php&mysql
23-04-2005, 16:49
theo mình cách tốt nhất là dùng 2 câu insert bạn à?
2 cau insert nghĩa là gì, đằng nào mà chẳng phải insert 2 lần vì nằm 2 table khác nhau mà, cái quan trong mình hỏi ở đây là cùng lúc để lấy lại id của article vừa insert.

ohyesssvn
25-04-2005, 08:30
Theo cách dùng select của bạn thì như sau (không biết có đúng không)

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

pixelart
29-04-2005, 14:49
insert 2 lần là simple và dễ làm nhất. 2 table thì có sao đâu :)