-1

テーブルを結合できるように、フィールドの値をその行の ID と同じに設定しようとして、データベースを正規化しています。

を使ってみLAST_INSERT_ID()ましたが、うまくいきません。エラーにはなりませんが、ゼロしか得られません。

INSERT INTO `eleves` (`user_id`, 
`first_name`, `last_name`, 
`username`, `groupe`, 
`password`, `courriel`, 
`active`, `auteur`, 
`citations`, `absurde`, 
`vocabulaire`,  `analyse`, 
`themes`, `personnages`) 
VALUES (NULL, 
'Jane', 'Doe', 
'janedoe', '400', 
'password', 'jane@doe.com', 
'1', LAST_INSERT_ID(), 
LAST_INSERT_ID(), LAST_INSERT_ID(), 
LAST_INSERT_ID(), LAST_INSERT_ID(), 
LAST_INSERT_ID(), LAST_INSERT_ID());

ありがとう!

4

2 に答える 2

0

MySQL セッション中に、自動生成された ID が挿入されなかったようです。したがって、入力するフィールドは(NULL?, SPACE?) ではなく、 (NULL?、SPACE?)last_insert_id()である必要があります。 zeroempty

テーブルで自動インクリメントを使用して主キーを定義し、新しいレコードを生成してみてください。そして何が起こるか見てください!

次の例を参照してください。

$ mysql -u ravi -p test
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 5.0.22-community-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|                0 |
+------------------+
1 row in set (0.00 sec)

mysql> create table eleves( user_id int not null auto_increment primary key, username varchar(10), auteur int, citations int, absurde int );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into eleves( username, auteur, citations, absurde )
    -> values( 'janedoe1', last_insert_id(), last_insert_id(), last_insert_id() );
Query OK, 1 row affected (0.03 sec)

mysql> select * from eleves;
+---------+----------+--------+-----------+---------+
| user_id | username | auteur | citations | absurde |
+---------+----------+--------+-----------+---------+
|       1 | janedoe1 |      0 |         0 |       0 |
+---------+----------+--------+-----------+---------+
1 row in set (0.00 sec)

mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)

mysql> insert into eleves( username, auteur, citations, absurde )
    -> values( 'janedoe2', last_insert_id(), last_insert_id(), last_insert_id() );
Query OK, 1 row affected (0.01 sec)

mysql> select * from eleves;
+---------+----------+--------+-----------+---------+
| user_id | username | auteur | citations | absurde |
+---------+----------+--------+-----------+---------+
|       1 | janedoe1 |      0 |         0 |       0 |
|       2 | janedoe2 |      1 |         1 |       1 |
+---------+----------+--------+-----------+---------+
2 rows in set (0.00 sec)

mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|                2 |
+------------------+
1 row in set (0.00 sec)

mysql>
于 2012-10-27T19:53:37.377 に答える
0

それらを囲む一重引用符を削除します

INSERT INTO `eleves`(`user_id`, `username`, `auteur`, `citations`, `absurde`) 
VALUES (NULL,'janedoe',LAST_INSERT_ID(),LAST_INSERT_ID(),LAST_INSERT_ID());
于 2012-10-27T19:03:28.760 に答える