Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Определение ID токо что добавленной темы
 
 автор: Buhen   (08.12.2007 в 19:58)   письмо автору
 
 

Всем доброго суток времени!
У меня проблема состоит в том, что я в БД добавляю одновременно 1 запись в одну таблицу(тему например) а в другую таблицу другую запись(само сообщение). И мне надо id узнать токо что добавленной темы чтобы занести id темы в таблицу(сообщения) потому что сообщения принадлежат токо определенной теме(то есть у меня сделана принадлженость по id)! Поле id (int11)auto_increment ключевое. Я знаю что можно сделать так: добавить тему а потом просто выяснить какая самая последняя тема по дате но так как то глупо - может функция какая нибудь есть?

Вот код который я написал:


<?
$comment 
addslashes($_POST['comment']);
$topic addslashes($_POST['topic']);
$comment str_replace("\r\n\r\n""\r\n"$comment);
$author addslashes($_SESSION['login']);
$query_add "INSERT INTO topics (topic, 
author, login_id, insert_date) VALUES 
('
$topic', '$author', \"".
addslashes($_SESSION['id_login'])."\", \"".
date("Y:m:d H:i:s")."\")";
mysql_query ($query_add);
if (
mysql_errno() != 0)
{
  echo 
"<p>Произошла ошибка при добавлении темы";
}
else
{
//Определение id темы
  
$query_id "SELECT * FROM topics 
ORDER BY id_topic DESC LIMIT 1"
;
  
$result_id mysql_query ($query_id
  or die(
"Неправильный запрос : " 
mysql_error());
  if (
mysql_num_rows ($result_id) == 0)
  {
    echo 
"Ошибка";
  }
  else
  {
    
$row_id mysql_fetch_object($result_id);
    
$id_t $row_id->id_topic;
  }
  
$query_ad "INSERT INTO comments 
(comment, author, login_id, topic_id, 
insert_date) VALUES ('
$comment', '$author', 
\""
.addslashes($_SESSION['id_login'])."\", 
'
$id_t', \"".date("Y:m:d H:i:s")."\")";
  
mysql_query ($query_ad);
  if (
mysql_errno() != 0)
  {
    echo 
"<p>Произошла ошибка при добавлении темы!";
  }
  else
  {
    echo 
"<p>Ваша тема успешно добавлена</p>";
    echo 
"<p><A HREF='index.php?act=viewtopic&t=".$id_t."'
    >Просмотреть добавленную тему</A></p>"
;
  }
}
?>


Буду рад если поможете!

   
 
 автор: sim5   (08.12.2007 в 20:03)   письмо автору
 
   для: Buhen   (08.12.2007 в 19:58)
 

Сразу после запроса в таблицу (после записи), которая у вас определяет ID тем, делайте запрос:
$id_t = mysql_insert_id();

   
 
 автор: Buhen   (08.12.2007 в 20:24)   письмо автору
 
   для: sim5   (08.12.2007 в 20:03)
 

Большое спасибо!

   
 
 автор: kis-kis   (03.01.2008 в 20:13)   письмо автору
 
   для: sim5   (08.12.2007 в 20:03)
 

А если нужно узнать id будущей записи? Как тогда быть?

   
 
 автор: Trianon   (03.01.2008 в 20:37)   письмо автору
 
   для: kis-kis   (03.01.2008 в 20:13)
 

Id будущих записей узнать невозможно, поскольку несколько запросов добавления могут следовать паралельно.
Узнать можно лишь id записи только что добавленной.

   
 
 автор: kis-kis   (03.01.2008 в 20:40)   письмо автору
 
   для: Trianon   (03.01.2008 в 20:37)
 

Можно ведь узнать последний id отдельным запросом и прибавить к нему 1? Тогда в принципе получим будущий. Правильно?

   
 
 автор: Trianon   (03.01.2008 в 20:55)   письмо автору
 
   для: kis-kis   (03.01.2008 в 20:40)
 

Нет, неправильно.
Потому что в процессе добавления единицы и использования получившегося числа может пройти еще к примеру 3-5 запросов на добавление.

   
 
 автор: kis-kis   (03.01.2008 в 21:10)   письмо автору
 
   для: Trianon   (03.01.2008 в 20:55)
 

А как тогда лучше поступить?

   
 
 автор: Trianon   (03.01.2008 в 21:19)   письмо автору
 
   для: kis-kis   (03.01.2008 в 21:10)
 

sim5 (08.12.2007 в 20:03) уже сказал: mysql_insert_id()

   
 
 автор: kis-kis   (03.01.2008 в 21:10)   письмо автору
 
   для: Trianon   (03.01.2008 в 20:55)
 

-

   
 
 автор: kis-kis   (04.01.2008 в 15:49)   письмо автору
 
   для: Trianon   (03.01.2008 в 20:55)
 

У Вас нет идей? ))

   
 
 автор: Unkind   (04.01.2008 в 16:27)   письмо автору
 
   для: kis-kis   (04.01.2008 в 15:49)
 

Вы прикидываетесь? mysql_insert_id()

   
 
 автор: Trianon   (04.01.2008 в 16:35)   письмо автору
 
   для: kis-kis   (04.01.2008 в 15:49)
 

Когда у меня спрашивают "Как лучше забить гвоздь?" , я обычно отвечаю "Молотком".
И не боюсь показаться неоригинальным, если до меня этот способ тоже кто-то предложил.

Хотя, таки да, можно пытаться применять почти любой твердый и тяжелый предмет.
Но поймите - лучше не будет. Будет только хуже.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования