gpt4 book ai didi

php - MySQL 自动生成以下数字

转载 作者:行者123 更新时间:2023-11-29 01:23:04 25 4
gpt4 key购买 nike

我的关系表中有 4 列:

  1. 身份证
  2. CID - 类(class)编号
  3. LID - 相关类(class)的唯一 ID
  4. course_based_id - 下面的解释

在另一个名为 lessonscourses 的表中有一堆具有唯一 ID 的类(class)和类(class)。这个表就是,它们之间的关联表。基本上它将唯一的类(class) ID 分配给唯一的类(class) ID。但是.. 需要基于类(class)的类(class)ID。我的意思是,例如让我们看一下屏幕截图中的第一行和第二行

enter image description here

盖子 1 是类(class) 2 的第一课,盖子 3 是类(class) 2 的第二课...等等。因此,如果我插入 cid 2,lid 128,它必须是类(class) 2 的第三课。

现在,问题是,我想在插入时自动生成这个数字:

$q="INSERT INTO `courses-lessons` (`cid`, `lid`) VALUES (?,?)";

但不知道该怎么做。一些 MySQL 函数?还是内部查询?

最佳答案

如果你使用 MyISAM 引擎来存储这个表,这可以相对容易地完成:你只需这样定义字段:

cid INT NOT NULL,
course_based_id INT NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY (cid, course_based_id)

然后任何 INSERT 都会根据 cid 自动为 course_based_id 分配一个新的 (+1) 值。这是一个 Fiddle说明这个概念。

您可以在 MySQL documentation 中找到更多相关信息.

不幸的是,InnoDB 引擎中没有这样的机制。所以也许你可以摆脱以下例程(这是一个伪代码,有一些细微差别):

1) lock table for writing; 
2) @x = SELECT MAX(course_based_id) WHERE cid = %cid_to_be_inserted%;
3) INSERT (..., course_based_id) VALUES (..., @x + 1);
4) unlock table;

我建议检查 this answer ;它适用于 PostgreSQL,而不是 MySQL,但在一些细节上描述了一种可能的实现。

更新:这是实现该行为的一组实际查询的示例:

CREATE TABLE tx
(id INT NOT NULL, cid INT NOT NULL, lid INT NOT NULL,
course_based_id INT NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY (cid, course_based_id)
);

LOCK TABLE tx WRITE, tx AS t READ;

INSERT INTO tx (id, cid, lid, course_based_id)
SELECT 2, 2, 1,
1 + COALESCE(
(SELECT MAX(course_based_id)
FROM tx AS t
WHERE cid = 2),
0);

INSERT INTO tx (id, cid, lid, course_based_id)
SELECT 3, 2, 3,
1 + COALESCE(
(SELECT MAX(course_based_id)
FROM tx AS t WHERE cid = 2),
0);

UNLOCK TABLES;

如您所见,没有直接计算下一个 course_based_id 值,但我们在这里得到了序列。

关于php - MySQL 自动生成以下数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12290471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com