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

Форум MySQL

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

 

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

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

тема: Как узнать ID
 
 автор: gust   (06.11.2008 в 13:46)   письмо автору
 
 

Подскажите, можно ли узнать ID записи, которую обновил запрос
к примеру:

update table set a=1 where b=2 limit 1

  Ответить  
 
 автор: cheops   (10.11.2008 в 21:10)   письмо автору
 
   для: gust   (06.11.2008 в 13:46)
 

Выполните SELECT-запрос
select id from table set a=1 where b=2 limit 1

  Ответить  
 
 автор: Trianon   (10.11.2008 в 21:14)   письмо автору
 
   для: cheops   (10.11.2008 в 21:10)
 

>Выполните SELECT-запрос
>select id from table set a=1 where b=2 limit 1

o_O

  Ответить  
 
 автор: AcidTrash   (10.11.2008 в 22:09)   письмо автору
 
   для: cheops   (10.11.2008 в 21:10)
 

Наверно
select id from table where a=1 and b=2 limit 1 

  Ответить  
 
 автор: Trianon   (10.11.2008 в 22:14)   письмо автору
 
   для: AcidTrash   (10.11.2008 в 22:09)
 

Не получите Вы так ничего определенного.
Оная запросто может оказаться строкой, уже имевшей такие значения до выполнения update

  Ответить  
 
 автор: AcidTrash   (10.11.2008 в 22:28)   письмо автору
 
   для: Trianon   (10.11.2008 в 22:14)
 

Тогда по хорошему, должно передаваться из формы id, изменяющейся записи.

  Ответить  
 
 автор: Trianon   (10.11.2008 в 22:40)   письмо автору
 
   для: AcidTrash   (10.11.2008 в 22:28)
 

>Тогда по хорошему, должно передаваться из формы id, изменяющейся записи.

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

  Ответить  
 
 автор: AcidTrash   (10.11.2008 в 22:43)   письмо автору
 
   для: Trianon   (10.11.2008 в 22:40)
 

Думаю, автор теперь решение поймет.

  Ответить  
 
 автор: Gust   (12.11.2008 в 09:20)   письмо автору
 
   для: AcidTrash   (10.11.2008 в 22:43)
 

>Думаю, автор теперь решение поймет. (AcidTrash)
У меня пока решение только такое: устанавливать в update другому полю (с) `уникальное значение` (скажем, время и/или т.п.) и во втором запросе по нему selectом доставать id.
Мне это не совсем нравится, так как гипотетически `уникальность` может и несоблюстись.

>Не будучи столь категоричным, скажу лишь, что по хорошему, таких запросов, как начале темы, порождаться не должно.(Trianon)
хм, полагаю без limit такие запросы на обновление записей используют 99% народа (может и больше).
Я такой запрос использую для того, чтобы 'ненужные' записи (b=2) заменить на новые- свежие (конечно в update b устанавливаю в 1) вместо добавления insertом (чтоб не расширять объем базы). Мне просто никогда не нужен был id, а теперь стал нужен. Для inserta есть команда mysql_insert_id, может что-то подобное есть для update ? (что-то мне кажется вопрос риторический : ) )

Спасибо всем за активное участие!

  Ответить  
 
 автор: Trianon   (12.11.2008 в 09:59)   письмо автору
 
   для: Gust   (12.11.2008 в 09:20)
 

>>Не будучи столь категоричным, скажу лишь, что по хорошему, таких запросов, как начале темы, порождаться не должно.(Trianon)
>хм, полагаю без limit такие запросы на обновление записей используют 99% народа (может и больше).

Без LIMIT это совершенно нормальный запрос. Поведение его полностью определенное - он изменит все записи, удовлетворяющие условию.
Ваш же изменяет одну, причем какую именно - никто не знает.

>Я такой запрос использую для того, чтобы 'ненужные' записи (b=2) заменить на новые- свежие (конечно в update b устанавливаю в 1) вместо добавления insertом (чтоб не расширять объем базы). Мне просто никогда не нужен был id, а теперь стал нужен.

Сделайте честно. SELEСTом получите ключ записи, затем UPDATEом по этому ключу измените поле в записи.

>Для inserta есть команда mysql_insert_id, может что-то подобное есть для update ? (что-то мне кажется вопрос риторический : ) )

Для INSERTа есть такой инструмент потому, что никакими другими способами ключ новой записи гарантированно в MySQL не получить. В других субд для этого используются секвенции - здесь нету.

  Ответить  
 
 автор: Gust   (12.11.2008 в 12:33)   письмо автору
 
   для: Trianon   (12.11.2008 в 09:59)
 

>Ваш же изменяет одну, причем какую именно - никто не знает.
в приципе, до определенного времени , это было и не важно, лишь бы была запись в таблице

>Сделайте честно. SELEСTом получите ключ записи, затем UPDATEом по этому ключу измените поле в записи.
честно не получается, между select и update может вклинится другой select который также получит этот ключ, и не ясно еще чей update будет при этом последним.

но все одно спасибо за новое для меня слово "секвенции"

  Ответить  
 
 автор: AcidTrash   (12.11.2008 в 19:49)   письмо автору
 
   для: Trianon   (12.11.2008 в 09:59)
 

>Для INSERTа есть такой инструмент потому, что никакими другими способами ключ новой >записи гарантированно в MySQL не получить
Хм, а если сделать LAST_INSERT_ID ?

  Ответить  
 
 автор: Trianon   (12.11.2008 в 21:07)   письмо автору
 
   для: AcidTrash   (12.11.2008 в 19:49)
 

это не одно и то же?

  Ответить  
 
 автор: AcidTrash   (12.11.2008 в 21:20)   письмо автору
 
   для: Trianon   (12.11.2008 в 21:07)
 

>это не одно и то же?
Это одно и тоже, но по вашей фразе
>никакими другими способами ключ новой записи гарантированно в MySQL не получить
Это имеется ввиду насчет, mysql_insert_id.

  Ответить  
 
 автор: Trianon   (12.11.2008 в 21:38)   письмо автору
 
   для: AcidTrash   (12.11.2008 в 21:20)
 

Имеется в виду насчет AUTO_INCREMENT вообще.

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

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