Подскажите, пожалуйста, в какой таблице базы хранится nid последней созданной ноды? Drupal 6.14
В Drupal 5.* эти данные хранились в {sequences}. В Drupal 6.*, как мне казалось, - в {variable}... но поиск не принёс результата. Возможно, я не там ищу.
PS. Банальный запрос к {node}_nid не предлагать, это совершенно не то, что нужно.
Комментарии
Интересно знать почему не то что нужно? На мой взгляд это самое простое. В чем я заблуждаюсь?
по-моему наблюдаем противоречие
Отвечу сразу ivcons и sadmin, спасибо, что откликнулись.
Если использовать такой алгоритм, то возможно следующее недоразумение. Я создаю, например, 20 любых нод. В нодах типа nodetype при этом я задаю автоматическую генерацию заголовка по шаблону nodetype_last_nid_+_1, поскольку мне нужно, чтобы ноды этого типа носили название, содержащее их nid. Всё прекрасно работает, все счастливы.
Но потом я беру и удаляю 5 последних нод. И снова создаю ноды типа nodetype с автогенерящимся заголовкам. И вот ведь беда: nid у этих нод такой как положено, то есть 21, 22, 23 и т.д., а вот в заголовке имеем 16, 17, 18 и т.д. То есть имеем-то всё правильно, мы же взяли самый последний nid из {node}. НО при этом понимаем, что в действительности nid, которые присваиваются вновь создаваемым нодам, берутся из какой-то переменной, которую я не могу найти, поэтому прошу помощи.
Повторюсь, что в Drupal 5.* я решала эту задачу просто, обращаясь к полю node_id в таблице {sequences}. В ранних версиях Drupal 6.* (или в поздних 5.*), как мне помнится, аналогичная переменная хранилась в {variable}. А теперь где искать?
А попробуйте использовать функцию db_last_insert_id('node','nid')
спасибо, Goodboy, но я уже использовала этот вариант, у меня эта функция, вставленная в код автогенерящегося заголовка, возвращает значение 0. в причинах пытаюсь разобраться на русском API, но пока там ответа нет.
Попробуйте смотреть последнюю не пустую ноду.
в D6 nid последней ноды нигде отдельно не храниться.
Посему вам в ваших заголовках скорее всего стоит использовать $node->nid.
что касаемо db_last_insert_id(), то все правильно вам возвращает. Эту ф-цию имеет смысл использовать сразу за db_query() в которой создается новая запись в таблицу с полем с автоинкрементом.
ЗЫ Т.к. в d5 в таблице node поле nid не имело автоинкремента, то возникала необходимость где-то хранить значение последнего id . В D6 же node.nid имеет автоинкремент и посему за правильным значением следит сама СУБД.
Звиняйте если несколько сумбурно ответил.
Я запускал db_last_insert_id на сайте, на котором производится массированное добавление нод. Видимо, поэтому мне не всегда возвращался 0.
Может, такой вариант сработает:
<?php
function db_last_id($table, $field) {
db_result(db_query("SELECT nextval('%s_seq')", db_prefix_tables($field)));
return db_last_insert_id($table,$field);
}
print db_last_id('node','nid');
?>
Есть еще db_next_id(). Рекомендую. При ее использовании не возникнет необходимости делать запрос после вставки.
Я внутренности db_next_id() и вставил внутрь своей самописной функции
Эта ф-ция только на D5 существует.
Господа, учите матчасть!!
итак для MySQL смотрим в database.mysql-common.inc
return db_result(db_query('SELECT LAST_INSERT_ID()'));
}
затем смотрим сюда и ВНИМАТЕЛЬНО читаем. Все вопросы отпадут.