Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Получить ID последней строки добавленной в БД MySQL (http://forum.oszone.net/showthread.php?t=83540)

ssdm 04-05-2007 12:12 582965

Получить ID последней строки добавленной в БД MySQL
 
Добрый день.
Есть 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 582982

Возможно я не прав, но не вижу смысла создавать 4 таблицы практически с одним полем.. Почему не поместить все в одну?

ssdm 04-05-2007 13:23 582993

Цитата:

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

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

Prisoner 04-05-2007 15:46 583055

ssdm, прочтите документацию по MYSQL_INSERT_ID в MySql и по ее "реализации" из-под PHP. Имхо, как раз Ваш случай.

ssdm 04-05-2007 16:10 583072

уже разобрался ... сделал так:
Цитата:

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 583267

Это Вы очень неправильно сделали. 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 583282

Prisoner шонто с кавычками помоему намудрили:)

Prisoner 05-05-2007 13:02 583368

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

ssdm 05-05-2007 21:15 583511

Prisoner
так и сделал... спасибо за помощь

mar 06-05-2007 19:47 583767

ssdm
Итог, который описан у Вас выше?

FADE 07-05-2007 04:42 583868

mar может у него специфическая бд или предпарсер запросов :)

ssdm 07-05-2007 23:12 584261

mar
сделал как написал prisoner с помощью mysql_insert_id()...


Время: 12:00.

Время: 12:00.
© OSzone.net 2001-