2009-10-28 8 views
1

PHP를 사용하여 내 테이블에 mysql 삽입을 수행하고 있습니다. 자동 증가 열 이름은 "link_id" 이고 "별칭"열은 SEO 친숙한 URL을 만드는 데 사용됩니다.현재 auto_increment 값 가져 오기

내 삽입 중에 내 별칭 열의 끝에 link_id 값을 첨부하고 싶습니다.

그래서 나는 link_id 값이 삽입되는 것을 알아야합니다.

다른 검색어를 사용하고 싶지 않습니다.

mysql_insert_id()는 이전 쿼리를 사용하고 있으며 현재 쿼리가 아니기 때문에 작동하지 않습니다. 즉 항상 신뢰할 수있는하지 않지만

감사

답변

0

당신은() ++에 mysql_insert_id를 사용할 수 있습니다.

는 쿼리를 삽입 사용한다

+0

에 mysql_insert_id()에 mysql_insert_id()가 연결이기 때문에 ++ 작동하지 않습니다 'TABLENAME에서 별칭으로 CONCAT (aliasroot, LINK_ID)를 선택'할 것입니다 예를

내 선택에

당신을 줄 것이다 특유한. 이 테이블에 단 하나의 삽입이 발생한다는 것은 안전한 가정입니다. – longneck

3

CONCAT()를 사용하여 현재 ID를 추가하는 것보다 나은 것이 무엇 SHOW TABLE STATUS :

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

그것은 당신에게 AUTO_INCREMENT 컬럼의 현재 상태를 줄 것이다 .

편집 :

하나 개의 쿼리에서 당신이 이런 식으로 작업을 수행 할 수 있습니다

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'")) 

그것은 열 column_name 당신에게 새로운 AUTO_INCREMENT 값을 제공 할 것입니다.

+0

Dereleased가 지적한 바와 같이 $ next_id에 대한 귀하의 가정은 경쟁 조건에 취약합니다. – 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 ; 

편집 : 저는 최근에 누구의 주력 소프트웨어가 최대 (아이디) + 1 = 다음 ID를 가정하는 데 사용되는 회사에 근무했다. 문제는 동시성입니다. 드물지만 두 사람이 같은 이드를 갖게되어 모든 종류의 혼란을 일으킬 수 있습니다. 값을 예측하려고 할 때 매우 신중해야합니다.

2

이 시나리오는 SELECT 끝에 처리됩니다.

예 : tablename (aliasroot) 값에 삽입 ('index.php? link_id =');

이것은 내가

+0

그게 최선의 방법입니다. 비록 내가 PHP 엔드에서 concatenation을 할 것이지만, mysql을 좀 덜 바쁘게 유지하십시오. – melfar

+0

데이터를 복제하지 않고 데이터베이스에서 프레젠테이션 사용을위한 서식을 유지하기 때문에이 솔루션을 선호합니다. – Kwebble