2011-01-26 80 views
1

我尝试给我一个真正的问题的anology。我有两个表格,一个用于评论。每个人都有自己的主键。但是每篇文章都可以有几条评论。将值插入两个相关的表

因此,这里是SQL用于插入文章到数据库(MySQL的在PHP)代码:

$sql="INSERT INTO articles (content) 
     VALUES 
     ('$content')";//$content variable has text related to the article 

的物品表有两项条款ArticleID和内容。当我插入内容时,每个插入的文章会自动获得一个独特的articleId。 articleId是文章表的主键。有没有一种简单的方法以有效的方式获得该文章的编号?我的意思是有效的方法:尽量避免更多的SQL代码。因为在下一步中,我需要使用articleId将每条评论与这篇文章相关联。

$sql="INSERT INTO comments (comment, articleId) 
     VALUES 
     ('$comment', '$articleId')";//commentId is the primary key, but it's auto inserted 

回答

3

为什么不是这样的东西这个:

$query = "INSERT INTO articles ..." 
mysql_query($query); 
$new_id = mysql_insert_id(); 

foreach($comments as $comment) { 
    $query = "INSERT INTO comments (articleID, comment) VALUES ($new_id, $comment);" 
    mysql_query($query); 
} 
0

尝试实施触发器,以便在文章获取插入时执行插入操作。

+0

我不明白?你能给som代码例子吗? – einstein 2011-01-26 18:04:56

0

触发器似乎是要走的路 - 但是,不要太触发快乐,因为逻辑和触发器本身是隐藏的使用。

总是在某个地方记录一个您创建的触发器,以防万一您忘记了它的更远行。

+0

我不知道触发器是什么?代码示例? – einstein 2011-01-26 18:07:23

0

在您的第二个查询中,您可以引用最后一个插入ID - 您可以使用MySQL函数或PHP函数来执行此操作。

的MySQL:

INSERT INTO comments (comment, articleId) 
     VALUES 
     ('comment', LAST_INSERT_ID()) 

PHP:

$sql="INSERT INTO comments (comment, articleId) " 
     . "VALUES " 
     . "('$comment', mysql_insert_id())"; 

编辑:如果您正在创建一个条款ArticleID之后插入一个以上的评论,你会想,只要你插入存储条款ArticleID (在PHP中),然后在将来使用该变量,如下所示:

$sql="INSERT INTO articles (content) 
     VALUES 
     ('$content')" 
$articleid = mysql_insert_id(); 

$sql="INSERT INTO comments (comment, articleId) " 
     . "VALUES " 
     . "('$comment', $articleid)"; 
$sql="INSERT INTO comments (comment, articleId) " 
     . "VALUES " 
     . "('$comment', $articleid)"; 
+0

如果有超过1条评论要插入,这将炸毁 - 之后last_insert_id()将返回先前评论的ID,而不是文章的ID。 – 2011-01-26 18:08:36