0

我有一段 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”来插入一个新的。

例如:

如果 TeacherId 的“Teacher”表如下所示:

TeacherId

T1
T2
T3
T4

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

有谁知道如何实现这一点。任何帮助将非常感激 :)

谢谢

4

3 回答 3

3

TeacherId一个varchar变为一个int。创建表看起来有点像这样:

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

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

如果您必须在前面加上T,您可以随时使用CONCATphp 代码或在 php 代码中执行此操作。

于 2012-08-23T17:00:06.890 回答
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

我没有测试过这段代码。

于 2012-08-23T17:34:16.263 回答
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 ;

并将其插入表中后:

...

于 2012-08-23T18:33:18.577 回答