如何将下一个最高编号插入数据库

时间:2012-08-23 16:57:24

标签: php mysql database mysqli

我有一段mysqli代码,我在其中写入了将值插入数据库的内容:

$insertsql = "
INSERT INTO Teacher
    (TeacherId, TeacherForename, TeacherSurname, TeacherEmail, TeacherAlias, TeacherUsername, TeacherPassword, Active, Code)
  VALUES
    (?, ?, ?, ?, ?, ?, ?, ?, ?)
";
if (!$insert = $mysqli->prepare($insertsql)) {
  // Handle errors with prepare operation here
}

$teacherid = ;

$insert->bind_param("sssssssss", $teacherid, $getfirstname, $getsurname,
             $getemail, $getteachid, $getuser,
             $password, $active, $code);

$insert->execute();

if ($insert->errno) {
  // Handle query error here
}

$insert->close();

但我有一点问题。目前我已将$teacherid变量留空了,但是我希望这个变量能够从数据库中找到最后一个“TeacherId”,并通过插入下一个“TeacherId”插入一个新变量。

例如:

如果“Teacher”表对于TeacherId看起来像这样:

TeacherId

T1
T2
T3
T4

然后,当我插入一个新的TeacherId值时,它应该插入T5,这是因为T4是当前最高的T编号,所以下一个数字应该是T5。

有谁知道如何实现这一目标。任何帮助将不胜感激:))

谢谢

3 个答案:

答案 0 :(得分:3)

TeacherIdvarchar更改为int。 create table看起来有点像这样:

CREATE TABLE Teacher (
   TeacherId int unsigned not null auto_increment primary key

auto_increment将从1开始,每次插入时自动增加1。

如果你必须添加T,你可以随时使用CONCAT或php代码。

答案 1 :(得分:0)

你可以这样做。它是一个带有格式化列的自动递增主键列。我没有机会测试这个。

CREATE TABLE Teacher (
  TeacherId mediumint UNSIGNED AUTO_INCREMENT PRIMARY_KEY,
  TeacherIdF varchar(6) AS 'T_' + CONVERT(varchar, TeacherId),
  ...
  CONSTRAINT Teacher_UKey01 UNIQUE (TeacherIdF)
)

如果约束不起作用,您可以创建一个触发器,在插入行后更新列。

CREATE TABLE Teacher (
  TeacherId mediumint UNSIGNED AUTO_INCREMENT PRIMARY_KEY,
  TeacherIdF varchar(6) NULL
  ...
)

CREATE TRIGGER FormattedTeacherId
AFTER insert ON Teacher
BEGIN
UPDATE Teacher SET TeacherIdF = CONCAT('T', TeacherId)
END

我还没有测试过这段代码。

答案 2 :(得分:0)

你可以试试这个:

首先获取表中的总行数并将其递增1并将其放入新的id中例如:

$selectUsers = mysql_query ("SELECT * FROM `Teacher`") or die(mysql_error());
$num_rows = mysql_num_rows($selectUsers);

$next_id = $num_rows+1;

$new_id = 'T'.$next_id ;

并将其插入表格后:

...