0

私は2つのテーブルを持っています:

Customer自動インクリメントであるフィールドIDと主キーと

addresscustomer_ID外部キーであるフィールドを使用します。

すべての顧客情報とその住所を尋ねるフォームがあります(1つ以上にすることができます)

次の2つのクエリを実行してデータベースを更新しますが、現在、Customer_ID手動で値を入力してテストしています。

mysql_query("INSERT INTO customer(First_Name, Surname, Company_Name, Telephone, Alt_Telephone)VALUES('$fName', '$lName', '$cName', '$tel', '$altTel')") ;
mysql_query("INSERT INTO address(line_1, line2, town, postcode, customer_ID)VALUES('$line1', '$line2', '$town', '$post_code', '2')") ;

このcustomer_IDフィールドは、顧客テーブルの現在のフィールドと同じである必要がありIDます。アドレステーブルが入力されたときに、これが自動的に行われていることを確認するにはどうすればよいですか。

4

2 に答える 2

2

PHPの使用

問題の最も簡単な解決策は、 (テーブルの顧客にデータを挿入する)へmysql_insert_idの最初の呼び出しの後にphpコードを呼び出すことです。mysql_query

この関数は最後に挿入されたIDを返しますが、顧客のIDが自動インクリメントされる主キーであることを確認する必要があります。

によって返される値はmysql_insert_id、指定された接続/セッションに対してローカルです。実行後に別の接続がレコードを挿入した場合でも、IDが挿入されます。


MySQLの使用

以下のようにSQL関数を使用できます。前に実行したsql-queryがcustomerLAST_INSERT_ID()への挿入であったことを確認してください(IDが実際にキーであり、自動インクリメントされていることを確認してください)。

-- first insert into `customer`

INSERT INTO address
  address(line_1, line2, town, postcode, customer_ID)
VALUES
  ('$line1', '$line2', '$town', '$post_code', LAST_INSERT_ID());

ここではphp-versionと同じようにLAST_INSERT_ID()、最後に挿入されたIDを取得します。


SELECTINTOとして記述できるSQL機能を使用することもできます。以下のスニペットを参照してください。

INSERT INTO address
 address(line_1, line2, town, postcode, customer_ID)
SELECT
  '$line1', '$line2', '$town', '$post_code', customer.id
FROM customer
WHERE <some_constraint>

于 2012-07-17T19:01:34.303 に答える
1

(1)mysql_insert_id()phpで使用するか、(2)LAST_INSERT_ID()SQLで直接使用することができます

コード例1:

mysql_query("INSERT INTO customer(First_Name, Surname, Company_Name, Telephone, Alt_Telephone)
    VALUES('$fName', '$lName', '$cName', '$tel', '$altTel')") ;
$customer_id = mysql_insert_id();
mysql_query("INSERT INTO address(line_1, line2, town, postcode, customer_ID) 
    VALUES('$line1', '$line2', '$town', '$post_code', {$customer_id})") ;

コード例2:

mysql_query("INSERT INTO customer(First_Name, Surname, Company_Name, Telephone, Alt_Telephone)
    VALUES('$fName', '$lName', '$cName', '$tel', '$altTel')") ;
mysql_query("INSERT INTO address(line_1, line2, town, postcode, customer_ID) 
    VALUES('$line1', '$line2', '$town', '$post_code', LAST_INSERT_ID())") ;
于 2012-07-17T19:00:44.973 に答える