Задавайте вопросы, мы ответим
Вы не зашли.
Мне нужно узнать значение счётчика автоинкрементирования, которое будет присвоено полю ДО ввода в это поле, что бы использовать его в другом поле этой же таблицы. Т.е. `id`=5 (его вставит автоинкремент), а `file`='5 - file_name' То что `id` будет равным 5-ти я должен знать ДО запроса INSERT, что бы я в этом запросе подставил его значение (5-ку) в поле `file`.
Команда LAST_INSERT_ID() или LAST_INSERT_ID(id) мне никоем образом НЕ подходит, так как это просто аналог SELECT `id` FROM table_name ORDER BY `id` DESC LIMIT 1 и всё. Использовать это значение +1 казалось бы логично, но не факт что счётчик автоинкремента содержит значение именно значение, на единицу большего, чем последнее значение id.
Например я добавил 10 записей, а потом удалил 2 последних и LAST_INSERT_ID()+1 вернёт мне 9, хотя автоинкремент мне добавит 11.
Если с помощью команды ALTER TABLE `DB_name`.`Table_name` AUTO_INCREMENT=8; Его можно установить, например в 8, то должна же быть комманда, которая выводит значение именно этого счётчика, а не просто значение последнего введёного поля. В MySQL Query Brouser это значение отображается, но какой команндой выводится НЕ известно.
Отредактированно ILYA INDIGO (25.01.2011 16:11:48)
Неактивен
О )) SHOW TABLE STATUS LIKE 'jos_akula_catalog' Действительно содержит поле Auto_increment с нужным мне значением, но он так же содержит и то что мне НЕ нужно в данный момент.
А каким оброзом написать запрос так, что бы я увидел на выходе только это число, точнее только одно поле Auto_increment с нужным мне значением ?
Неактивен
Из раздела смам спросил - сам ответил...
Хух таки родил функцию...
function file_id()
{
$query = 'SHOW TABLE STATUS WHERE `Name`=\''.$this->table.'\'';
return ($res = $this->db->assoc($query)) ?$res[0]->Auto_increment :false;
}
Хотелось бы сделать красивый запрос, что бы вместо res[0]->Auto_increment сразу можно было возвращать res[0], ну сойдёт и так.
А вот с чем собственно я мучался так долго... в Joomla все таблицы содержат префикс jos_ по умолчанию, который зачем то кому то можно изменить, и я для автоподставления использовал запись:
var $table = '#__akula_catalog'; который потом заменяет #_ на jos. И я думал долго как лучше прописывать имена таблиц с jos_ или с #__. А вот запрос SHOW TABLE STATUS WHERE `Name`='#__akula_catalog' У меня выдавал всё время false, хотя в квери браузере и в консоли он выполнялся удачно, и после ручной замены #_ на jos у меня таки заработало, так что одним вопросом меньше )
Неактивен
По моему вы изначально поставили перед собой неправильно задачу. Зачем вам в базе такие значения - '5 - file_name'?
Пишите просто 'file_name', а когда нужно будет достать сделаете SELECT CONCAT(id,' - ',file) WHERE ... и никаких танцев с бубном, к тому же по полю 'file' будет возможность искать по индексу если понадобится (в вашем случае индекс в пролете).
Отредактированно Shopen (25.01.2011 20:28:37)
Неактивен
+1 к Shopen.
Никогда нет смысла угадывать, что выдастся. Выдастся, да не Вам. Прийдет другой
поток и заберет этот ID. А Вы на его базе уже построили какую-то логику.
Если не хотите заполнять основную таблицу — сделайте табличку генерации ID,
генерируйте в ней, а потом работайте с этим числом. Это уже будет безопаснее. Вам
всегда нужна точка сериализации запросов.
Неактивен