2009-10-28 2 views
1

Я делаю вставку mysql для своей таблицы, используя php. Имя колонтитула автоинкремента - «link_id» и «alias» colum используется для создания дружественного URL-адреса.Получить текущее значение auto_increment

Во время моей вставки, я хотел бы добавить значение link_id в конце столбца псевдонима.

Так что мне нужно знать, что такое вставленное значение link_id.

Я не хочу делать другой запрос.

mysql_insert_id() не работает, поскольку использует предыдущий запрос, а не текущий запрос.

Благодаря

ответ

0

можно использовать mysql_insert_id() ++, хотя это не всегда будет надежным.

, что было бы лучше было бы вставить запрос, затем добавить текущий идентификатор с помощью CONCAT()

+0

mysql_insert_id() ++ не будет работать, потому что mysql_insert_id() подключение конкретный. это безопасное предположение, что к этой таблице относится только одна вставка. – longneck

3

Вы должны использовать SHOW TABLE STATUS:

$query = mysql_query("SHOW TABLE STATUS LIKE tablename"); 
$row = mysql_fetch_array($query); 
$next_id = $row["Auto_increment"]; 

Это даст вам текущее состояние колонки auto_increment ,

EDITED:

В одном запросе вы можете сделать это следующим образом:

INSERT INTO table_schema.table_name(column_name) 
VALUES (("SELECT AUTO_INCREMENT 
     FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_SCHEMA = 'table_schema' 
      AND TABLE_NAME = 'table_name'")) 

Это даст вам новое значение AUTO_INCREMENT в столбце column_name.

+0

Ваше предположение о $ next_id зависит от условий гонки, о чем говорит Dereleased. – melfar

2

Считаете ли вы, что trigger in MySQL? Что-то вроде:

DELIMITER // 
CREATE TRIGGER `add_alias_id` AFTER INSERT ON `someTable` 
    FOR EACH ROW BEGIN 
     UPDATE 
      `someTable` 
     SET 
      `alias` = CONCAT(`alias`,NEW.`link_id`) 
     WHERE 
      `link_id` = NEW.`link_id`; 
    END;  
// 
DELIMITER ; 

EDIT: Я недавно работал для компании, флагман программного обеспечения, используемого предположить, что максимальное (ID) + 1 = следующий идентификатор. Проблема заключается в параллелизме; это редко, но два человека могут получить один и тот же идентификатор, вызывая всевозможные хаосы. Будьте предельно осторожны, пытаясь предсказать ценность.

2

Я обрабатываю этот тип сценария на конце SELECT.

Например: Вставить в значения tablename (aliasroot) ('index.php? Link_id =');

Это даст вам, например,

В мой выбор, я бы 'выбрать CONCAT (aliasroot, LINK_ID) в качестве псевдонима из имя_таблицы'

+0

Это лучший способ ИМО. Хотя я бы сделал конкатенацию в конце PHP, держите mysql немного менее занятым. – melfar

+0

Я предпочитаю это решение, потому что вы не дублируете данные и не сохраняете форматирование для использования из базы данных. – Kwebble

Смежные вопросы