我有一段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。
有谁知道如何实现这一目标。任何帮助将不胜感激:))
谢谢
答案 0 :(得分:3)
将TeacherId
从varchar
更改为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 ;
并将其插入表格后:
...