如何在mysql中增加默认值
我在mysql表中有一个字段(demo_field)(varchar)。我想用预定义的前缀增加这个字段值。 例如,我的字段第一个值是demo001
。现在,当插入新值时,我想增加数字数字,如demo002, demo003
。 如何使用PHP来做到这一点。如何在mysql中增加默认值
试试这个 -
//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);
是的。目前我使用这种方法。我只是想知道插入时是否可以直接(一些如何)增加值。谢谢@sgt – 2014-11-04 06:32:40
你将如何增加一个字符串,而无需在PHP中进行字符串操作? – 2014-11-04 06:35:26
此外还有一个小缺点。考虑到生成号码并不是一个好主意。因为如果我们删除几个值,然后根据计数生成数字可能会创建重复值 – 2014-11-04 06:37:07
//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
}
嗨,这种方法不能使用。我们必须检查表中已经存在的值,然后增加 – 2014-11-04 06:30:04
...我不知道你想要做什么然后-..- – lkxiaolou 2014-11-04 06:38:47
,你必须使用一个INT领域 和它翻译成你想在“选择”时间的任何格式。
在MySQL中,我们不能使用AutoIncrement for Varchar。
这是错误的。可以办到。 – 2014-11-04 06:53:11
你能举一些例子吗? – 2014-11-06 07:09:04
http://stackoverflow.com/a/17894239/和同一页内http://stackoverflow.com/a/26728953/ – 2014-11-06 07:10:31
在mysql中添加'AUTO_INCREMENT'并省略PHP中的'insert'字段 – 2014-11-04 06:09:43
如何做到这一点?为此,我们需要设置一个默认值?我也需要字母字符。如果我们给auto_increment,我们不能添加字母字符 – 2014-11-04 06:13:47