2015-02-26 3 views
1

У меня есть несколько таблиц, которые необходимо вставить с использованием разных форм, и вся таблица имеет один идентификатор, который является первичным ключом и его varchar (NOT NULL), поэтому у меня есть один класс function, называемая id_calc ($ tbl, $ id), где $ tbl - это параметр с именем таблицы, а $ id - идентификатор поля. И каждый раз при вставке этой функции нужно вызывать id.Получение последнего вставленного идентификатора varchar, который является первичным ключом

например: Если мой идентификатор «web1», следующий, когда я вставляю его, shud дать «web2», «web3» ...... Я попытался с LAST_INSERT_ID(), но его не работает. с извлечением max (id) и разбиением строки и переменной, но также дает некоторую проблему. Как я могу это сделать.пожалуйста, помогите !!!

class first{ 
public function id_calc($tbl,$id) 
    { 
     $sql = mysql_query("SELECT max($id) FROM $tbl where $id like '%web%'"); 
     if($sql) 
     { 
      while ($row = mysql_fetch_assoc($sql)) 
      { 
      $user=$row; 
      $a=implode(" ",$user); 

     } 
    $pattern = "/(\d+)/"; 
    $array = preg_split($pattern, $a, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 
    $new[]=$array['0']; 
    $new[]=$array['1']+1; 
    $result=implode("",$new); 
     return $result; 
     } 
    } 
} 

эта функция вызывается как

public function insertreport1() 
    { 
    $obj=new first(); 
    $id=$obj->id_calc(tablename,idfield); 
    //insert query 
    } 

это моя структура таблицы

CREATE TABLE `report` (
    `inc_id` varchar(25) NOT NULL, 
    `inc_status` int(11) NOT NULL, 
    `inc_date` datetime NOT NULL, 
    `inc_Name` varchar(45) NOT NULL, 
    `inc_Age` int(11) NOT NULL, 
    `inc_Gender` varchar(45) NOT NULL, 
    `inc_Mobile` varchar(45) NOT NULL, 
    `inc_Address` varchar(250) NOT NULL, 
    `inc_treatment` varchar(45) DEFAULT NULL, 
    `inc_userid` varchar(10) NOT NULL, 
    `inc_repTime` datetime NOT NULL 
    PRIMARY KEY (`inc_id`), 

) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
+0

хорошо, есть ли в колонке автоинкремент? Примечание: расширение 'mysql_ *' устарело, пожалуйста, воздержитесь от его использования. –

+0

нет автоинкремент. – user092

+0

, то вам, вероятно, понадобится колонка для заказа. Либо автоинкрементный, либо временный столбец, который записывает вставленное время. –

ответ

0

я думаю, что вы можете сделать это такое way..write запроса в «SELECT MAX (CAST (SUBSTRING ($ ID, 4,12) AS UNSIGNED)) FROM $ tbl WHERE $ id LIKE '% web%' " , а затем увеличивайте id как web + (max + 1).

0

Псевдо реализация будет

определение альтер таблица

alter table `table` add column id int(11) not null auto_increment 

изменения кода

public function id_calc($tbl,$idcol) { 
    $sql = mysql_query("SELECT id FROM $tbl order by id desc limit 1"); 
    if($sql){ 
     while($row = mysql_fetch_assoc($sql)); 
     $id = isset($row['id']) ? $row['id'] + 1 : 1; 
     return "{$idcol}{$id}"; 
    } 
} 

Надеется, что это помогает

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