2014-11-04 55 views
2

我在mysql表中有一个字段(demo_field)(varchar)。我想用预定义的前缀增加这个字段值。 例如,我的字段第一个值是demo001。现在,当插入新值时,我想增加数字数字,如demo002, demo003。 如何使用PHP来做到这一点。如何在mysql中增加默认值

+0

在mysql中添加'AUTO_INCREMENT'并省略PHP中的'insert'字段 – 2014-11-04 06:09:43

+0

如何做到这一点?为此,我们需要设置一个默认值?我也需要字母字符。如果我们给auto_increment,我们不能添加字母字符 – 2014-11-04 06:13:47

回答

3

试试这个 -

//fetch data from table 
$sql = $mysqli->query('select count(demo_field) as total,demo_field from tablename limit 1'); 
$res = $sql->fetch_assoc(); 

//generate string from existing data 
$str = substr($res['demo_field'], 0, 4); 
$dig = str_replace($str, '', $res['demo_field']); 
$dig = $dig+$res['total']; 

//add padding if needed 
$dig = str_pad($dig, 3, '0', STR_PAD_LEFT); 

//concatenate string & digits 
$newStr = $str.$dig; 

var_dump($newStr); 

的另一种方式,而不计

$sql = $mysqli->query('select max(demo_field) as demo_field from demo'); 
$res = $sql->fetch_assoc(); 

$str = substr($res['demo_field'], 0, 4); 
$dig = str_replace($str, '', $res['demo_field']); 
$dig += 1; 
$dig = str_pad($dig, 3, '0', STR_PAD_LEFT); 
$newStr = $str.$dig; 

var_dump($newStr); 

希望这种情况可能与count解决问题。

与最大计数另一种解决方案为字母数字字符串,并没有填充 -

$sql = $mysqli->query('select max(cast(substring(demo_field, 5) as unsigned)) as digit,  demo_field from demo'); 
$res = $sql->fetch_assoc(); 

$str = substr($res['demo_field'], 0, 4); 
$dig = $res['digit'] + 1; 
$newStr = $str.$dig; 

var_dump($newStr); 
+0

是的。目前我使用这种方法。我只是想知道插入时是否可以直接(一些如何)增加值。谢谢@sgt – 2014-11-04 06:32:40

+1

你将如何增加一个字符串,而无需在PHP中进行字符串操作? – 2014-11-04 06:35:26

+1

此外还有一个小缺点。考虑到生成号码并不是一个好主意。因为如果我们删除几个值,然后根据计数生成数字可能会创建重复值 – 2014-11-04 06:37:07

1
//use PHP not mysql 
$pre = 'demo'; 
$num = 0; 
define('MAX', 100); 
for($num = 0; $num < MAX; $num++) 
{ 
    $pre_str = $pre . sprintf("%03d", $num); 
    //insert here 
} 
+1

嗨,这种方法不能使用。我们必须检查表中已经存在的值,然后增加 – 2014-11-04 06:30:04

+0

...我不知道你想要做什么然后-..- – lkxiaolou 2014-11-04 06:38:47

0

,你必须使用一个INT领域 和它翻译成你想在“选择”时间的任何格式。

在MySQL中,我们不能使用AutoIncrement for Varchar。

+0

这是错误的。可以办到。 – 2014-11-04 06:53:11

+0

你能举一些例子吗? – 2014-11-06 07:09:04

+0

http://stackoverflow.com/a/17894239/和同一页内http://stackoverflow.com/a/26728953/ – 2014-11-06 07:10:31