2011-01-26 37 views
1

私は本当の問題のアニオロジーを与えようとします。記事用とコメント用の2つのテーブルがあります。それぞれには独自の主キーがあります。しかし、すべての記事はそれに関するいくつかのコメントを持つことができます。だからここ2つの関連するテーブルに値を挿入します

は、データベースに記事を挿入するためのSQL(PHPでMySQLの)コードです:

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

記事のテーブルには、2つの列情報でarticleIDとコンテンツを持っています。私はコンテンツを挿入するごとに、挿入された各記事は自動的に一意の記事IDを取得します。 articleIdは記事テーブルの主キーです。そのarticleIdの番号を効果的に取得する簡単な方法はありますか?効果的な方法で私は意味する:より多くのSQLコードを避けてみてください。次のステップでは、articleIdを使用してこの記事に各コメントを関連付ける必要があるためです。

答えて

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

0

トリガーは行く方法と思われますが、ロジックとトリガー自体が使用されないため、トリガーがあまりにも幸せにならないようにしてください。

あなたが作成したトリガーのどこかに、常にドキュメントを書き留めておいてください。

+0

トリガーは何ですか?コード例? – einstein

0

2番目のクエリでは、最後の挿入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

挿入するコメントが2つ以上ある場合、それは爆発します。そのlast_insert_id()は記事IDではなく前のコメントのIDを返します。 –

+0

Heh、true true - コメントしたように編集していたようです。 – TehShrike

関連する問題