|
|
|
| Если есть таблица table с одним из полей id (auto_increment ), как узнать, под каким id добавится новая строка в таблицу при запросе типа: INSERT INTO table VALUES (..........)
То есть, какмим будет следующий id? | |
|
|
|
|
|
|
|
для: RandomSOFT
(27.06.2006 в 19:49)
| | LAST_INSERT_ID
mysql_insert_id(); | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 21:04)
| | Что-то я несовсем понял, как эти функции могут помочь.... | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 21:04)
| | По идее, если использовать SHOW TABLE STATUS, то в колонке 'Auto_increment' как раз и будет показано нужное значение, но проблема в том, что у меня несколько таблиц в одной БД и не получается вытащить это значение.... | |
|
|
|
|
|
|
|
для: RandomSOFT
(27.06.2006 в 21:33)
| | вызов mysql_insert_id(); после последней операции INSERT вернет Вам сгенерированный для добавленной строки строки номер.
Больше одной таблицы за один оператор INSERT Вы всё равно не затронете.
Номер будущей строки получить нельзя в принципе, т.к. запросы к серверу могут следовать параллельно. | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 21:37)
| | это понятно, но разве эта функция не возвращает 0, если непосредственно перед ней не было запроса INSERT? мне надо узнать этот номер до самого запроса.... | |
|
|
|
|
|
|
|
для: RandomSOFT
(27.06.2006 в 21:40)
| | С целью?
Действительно, какой смысл узнавать номер,если достоверность его нельзя гарантировать? | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 21:37)
| | почему нельзя? делайте запрос SHOW TABLE STATUS, посмотрите соответствующую строку.... | |
|
|
|
|
|
|
|
для: RandomSOFT
(27.06.2006 в 21:42)
| | потому что параллельно этому SHOW TABLE STATUS может прийти еще один INSERT
И ответ окажется устаревшим.
Это чисто справочный запрос.
Собственно, таким запросом его и можно узнать.
Только бессмысленно. | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 21:46)
| | хорошо. Передо мной стоит такая задача: создать запись в таблице с двумя основными полями - id и file, где в file запишется имя файла, включающее в себя этот id.... | |
|
|
|
|
|
|
|
для: RandomSOFT
(27.06.2006 в 21:50)
| | только сегодня тема обсуждалась. Выполните UPDATE для свежевставленных строк.
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=19835 | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 21:55)
| | Замечу, что в UPDATE можно сделать нечто более существенное, чем просто присвоить полю первичный ключ. | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 21:57)
| | Кроме того для того чтобы сделать запрос нужно, чтобы файл был успешно загружен и переименован, а значит нужно знать имя файла еще до запроса.... это делается для того, чтобы не создавать строку, которой бы не соответствовал файл (если он будет незагружен....) | |
|
|
|
|
|
|
|
для: RandomSOFT
(27.06.2006 в 22:04)
| | Вы не получите эту информацию до запроса.
Dixi.
PS
Неужели так трудно понять, что запросы на добавление файлов могут идти в параллель друг другу?
Вы хотите, чтоб у Вас все файлы перепутались? | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 22:05)
| | неет, это я понимаю,просто говорю, что стоит найти какое-то другое решение, ибо это мне подходит не до конца..... | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 21:55)
| | но мне-то нужно, чтоб он назывался $id.".exe" например..... т.е. не функция, конечный итог - из цифры получить строку.... | |
|
|
|
|
|
|
|
для: RandomSOFT
(27.06.2006 в 22:01)
| | И что?
UPDATE tab
SET filename = CONCAT(id, '.exe')
WHERE filename IS NULL | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 22:04)
| | хм.... логично.... | |
|
|
|
|
|
|
|
для: RandomSOFT
(27.06.2006 в 22:06)
| | В Вашем случае этот изврат не нужен.
берете mysql_insert_id, в php вычисляете имя, переносите (move_uploaded_file) файл, и либо делаете UPDATE ... SET filename = $name либо DELETE в любом случае WHERE id = $id | |
|
|
|
|
|
|
|
для: Trianon
(27.06.2006 в 22:12)
| | В таком случае, наверно, действительно придется удалять строку при неудачной загрузке файла.... | |
|
|
|