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

Форум MySQL

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

 

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

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

тема: Нужны все ID последнего запроса.
 
 автор: xray   (23.08.2008 в 08:53)   письмо автору
 
 

 foreach($keytags as $partag)
          {
            $sqltag[ ] = "(NULL,'$partag')";
          }
          $query = "INSERT INTO $tbl_tags  VALUES ".implode(",",$sqltag);

Вставили в таблицу несколько значений ID и $partag, подскажите как вывести все ID данного запроса
в массив?
$ID = mysql_insert_id();

Возвращает ID, сгенерированный при последнем INSERT-запросе. Но, нужны все ID последнего запроса.

  Ответить  
 
 автор: ronin80   (23.08.2008 в 08:57)   письмо автору
 
   для: xray   (23.08.2008 в 08:53)
 

при вставке запоминать/записывать в массив с помощью mysql_insert_id()

  Ответить  
 
 автор: Trianon   (23.08.2008 в 09:03)   письмо автору
 
   для: xray   (23.08.2008 в 08:53)
 

>Возвращает ID, сгенерированный при последнем INSERT-запросе.
Возвращает первый ID, сгенерированный при последнем INSERT-запросе.
Оставшиеся можно получить, добавив нужное количество единичек.

  Ответить  
 
 автор: Valick   (23.08.2008 в 09:25)   письмо автору
 
   для: Trianon   (23.08.2008 в 09:03)
 

Оставшиеся можно получить, добавив нужное количество единичек.
А если имели место удаления?
Вобщем я так понимаю нужна транзакция?

  Ответить  
 
 автор: Trianon   (23.08.2008 в 09:33)   письмо автору
 
   для: Valick   (23.08.2008 в 09:25)
 

То что?
Честно, не понял.

UPD. по-моему, понял. Первичные ключи повторно не используются.

  Ответить  
 
 автор: Valick   (23.08.2008 в 10:02)   письмо автору
 
   для: Trianon   (23.08.2008 в 09:33)
 

Это я немного непонял. Вы говорили о многострочном инсёрте, а я сразу непонял. В этом случае транзакция ненужна, верно?)

  Ответить  
 
 автор: Trianon   (23.08.2008 в 10:16)   письмо автору
 
   для: Valick   (23.08.2008 в 10:02)
 

на один оператор? не нгужна.

  Ответить  
 
 автор: xray   (23.08.2008 в 09:34)   письмо автору
 
   для: Trianon   (23.08.2008 в 09:03)
 

Идея понятна.
Не понятно действие - "добавив нужное количество единичек."

  Ответить  
 
 автор: Trianon   (23.08.2008 в 10:12)   письмо автору
 
   для: xray   (23.08.2008 в 09:34)
 

Если mysql_insert_id() на 5-строчный INSERT вернул, к примеру, 17, то соответствующие id будут равны 17,18,19,20,21

  Ответить  
 
 автор: xray   (23.08.2008 в 15:32)   письмо автору
 
   для: Trianon   (23.08.2008 в 10:12)
 

Прошу помочь мне направить мои мысли в правильном направлении.
Немогу вычислить многострочный INSERT для mysql_insert_id()


// Извлекаем текущую максимальную позицию
          $query = "SELECT MAX(id) FROM $tbl_tags";
          $count = mysql_query($query);
          if(!$count)  exit("Ошибка при извлечении   максимального значения");
          $count = mysql_result($count, 0);

// Делаем многострочный INSERT  (добавляем список тегов)
          foreach($keytags as $partag)
          {
            $sqltag[] = "(NULL,'$partag')";
          }
          $query = "INSERT INTO $tbl_tags
                    VALUES ".implode(",",$sqltag);
          if(!mysql_query($query)) exit(""Ошибка при добавлении  tags");
 
// Извлекаем значение первичного ключа, только что вставленных  tags (тегов)
          $id = mysql_insert_id();
// Пытаемся получить все ID только что выполненного INSERT 
          for($i = $count; $i<=$id; $i++)
          {
           echo '<pre>'; print_r($i); echo '</pre>'; // Выводит максимум два ID при любом кол-ве INSERT 
          }

  Ответить  
 
 автор: Trianon   (23.08.2008 в 15:39)   письмо автору
 
   для: xray   (23.08.2008 в 15:32)
 

<? 
// Извлекаем текущую максимальную позицию

//  """""" этого делать нельзя. 

// Делаем многострочный INSERT  (добавляем список тегов)
          
foreach($keytags as $partag)
          {
            
$sqltag[] = "(NULL,'$partag')";
          }
          
$query "INSERT INTO $tbl_tags
                    VALUES "
.implode(",",$sqltag);
          if(!
mysql_query($query)) exit("Ошибка при добавлении  tags");

          
$count mysql_affected_rows();        
 
// Извлекаем значение первичного ключа, только что вставленных  tags (тегов)
          
$id mysql_insert_id();
// Пытаемся получить все ID только что выполненного INSERT 
          
for($i 0$i $count$i++)
              echo (
$id+$i) . "<br>"

  Ответить  
 
 автор: xray   (23.08.2008 в 16:27)   письмо автору
 
   для: Trianon   (23.08.2008 в 15:39)
 

Respect!!!

У меня вопрос относительно:
// Извлекаем текущую максимальную позицию
// """""" этого делать нельзя.
почему??

  Ответить  
 
 автор: Trianon   (23.08.2008 в 16:30)   письмо автору
 
   для: xray   (23.08.2008 в 16:27)
 

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

  Ответить  
Rambler's Top100
вверх

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