Войти

Показать полную графическую версию : [решено] Получить ID последней строки добавленной в БД MySQL


ssdm
04-05-2007, 12:12
Добрый день.
Есть 4 -ре таблицы :
mysql> create table contacts
-> (id int primary key auto_increment,
-> caption char(63)
-> );
Query OK, 0 rows affected (0.45 sec)

mysql> create table tel_fax
-> (id int primary key auto_increment,
-> cid int,
-> telefon char(25),
-> type int);
Query OK, 0 rows affected (0.08 sec)

mysql> create table address
-> (id int primary key auto_increment,
-> cid int,
-> adrress char(255));
Query OK, 0 rows affected (0.08 sec)

mysql> create table mails
-> (id int primary key auto_increment,
-> cid int,
-> email char(63),
-> name char(63));
В таблице tel_fax, address,mails поле cid соответствует полю id в таблице contacts.
Добавляю запись в таблицу:
sqlquery("INSERT into contacts values (NULL,".$URL->GET['name'].");
Вопрос: каким образом можно добавить(желательно средствами mysql) записи в таблицы tel_fax, address,mails , так что бы cid в этих таблицаx равнялся contacts.id? (Так как contacts.id изменяется автоматически, то понятное дело явно cid я указать не могу).

Strange_V
04-05-2007, 12:54
Возможно я не прав, но не вижу смысла создавать 4 таблицы практически с одним полем.. Почему не поместить все в одну?

ssdm
04-05-2007, 13:23
Возможно я не прав, но не вижу смысла создавать 4 таблицы практически с одним полем.. Почему не поместить все в одну?
дело в том что у каждого контакта может быть несколько телефонов, адресов, емейлов и факсов...

В любом случае хотелось бы решить данную проблему, так как вопрос,имхо, из ряда основополагающих..

Prisoner
04-05-2007, 15:46
ssdm, прочтите документацию по MYSQL_INSERT_ID в MySql (http://dev.mysql.com/doc/refman/5.0/en/mysql-insert-id.html) и по ее "реализации" из-под PHP (http://ru2.php.net/manual/en/function.mysql-insert-id.php). Имхо, как раз Ваш случай.

ssdm
04-05-2007, 16:10
уже разобрался ... сделал так:
sqlquery("INSERT into contacts values (NULL,'".$URL->GET['name']."');");
sqlquery("INSERT into address values (NULL,(SELECT id from contacts where caption='".$URL->GET['name']."'),'".$URL->GET['address']."');");

Prisoner
05-05-2007, 01:59
Это Вы очень неправильно сделали. contacts.caption - не уникальное поле и в случае когда подзапрос вернет массив, а не одиночное значение, будет логическая ошибка... впрочем просто ошибка :).
Сделайте так (если я правильно использую принятые Вами функции):
sqlquery("INSERT into contacts values (NULL, '".$URL->GET['name']."');");
sqlquery("INSERT into address values (NULL, ".mysql_insert_id().", '".$URL->GET['address']."');");

FADE
05-05-2007, 03:29
Prisoner шонто с кавычками помоему намудрили:)

Prisoner
05-05-2007, 13:02
Да, это Вы правы, поправил... кажется... вот, что с человеком подсветка делает - уж и в блокноте код набирать разучился %(.

ssdm
05-05-2007, 21:15
Prisoner
так и сделал... спасибо за помощь

mar
06-05-2007, 19:47
ssdm
Итог, который описан у Вас выше?

FADE
07-05-2007, 04:42
mar может у него специфическая бд или предпарсер запросов :)

ssdm
07-05-2007, 23:12
mar
сделал как написал prisoner с помощью mysql_insert_id()...




© OSzone.net 2001-2012