【问题标题】:Mysql Auto-incrementing int of similar dataMysql自动递增类似数据的int
【发布时间】:2012-12-28 10:53:21
【问题描述】:

所以这更像是一个关于如何执行此操作的查询,我是 MySQL/PHP 编码的新手,涉及的不仅仅是基础知识,所以我只是想知道如何设置自动递增int 如果两个姓氏相同,它将计算它们。 我在网上搜索时找不到任何东西,但一个例子是:

在数据库中我们有 5 个用户

 1. james smith 1   
 2. terry smith 2
 3. john smith 3
 4. jerry fields 1
 5. tom straus 1

当这些用户注册时,我需要创建一个 int,其中 john smith 是第三个具有相同姓氏 smith 的人,而 jerry fields 是第一个具有姓氏字段的人等。如何做到这一点?

我制作的表单是使用 jquery/php ajax 方法注册用户的表单,但是 我想添加与此类似的内容,以便将该数字与他们的姓名结合起来,形成一个特定的用户 ID。

【问题讨论】:

  • 你可以在你的表中设置自动增量,它们总是有唯一的ID,你也可以把名字和第二个名字写到不同的列,并通过select查询来计算
  • 是的,我确实已经让每一行都自动递增了,这将是一种简单的方法,但我的兴趣只是知道如何根据注册顺序根据相似的姓氏创建一个单独的 int 列。就像上面的例子一样,它自动将 smith 计数为 3,但看到字段并从 1 开始。但如果另一个 smith 稍后进来,它会在 4。也许它太复杂了,我想这必须在php 脚本读取 mysql 相同名称出现的次数,然后计数一次并发布到列。
  • 另一个你需要知道的同名人群的注册顺序?
  • 是的,然后发到专栏。
  • 您想在每次插入后创建一个Trigger 以在每次插入后更新“int 列”吗?

标签: php mysql int auto-increment


【解决方案1】:

Using AUTO_INCREMENT 中所述:

对于MyISAMBDB 表,您可以在多列索引的辅助列上指定AUTO_INCREMENT。在这种情况下,AUTO_INCREMENT 列的生成值计算为MAX(<em>auto_increment_column</em>) + 1 WHERE prefix=<em>given-prefix</em>。当您要将数据放入有序组时,这很有用。

因此,你可以这样做:

CREATE TABLE my_table (
  firstname VARCHAR(31) NOT NULL,
  lastname  VARCHAR(31) NOT NULL,
  counter   BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (lastname, counter)
) Engine=MyISAM;

INSERT INTO my_table
  (firstname, lastname)
VALUES
  ('james', 'smith' ),
  ('terry', 'smith' ),
  ('john' , 'smith' ),
  ('jerry', 'fields'),
  ('tom'  , 'straus')
;

sqlfiddle 上查看。

【讨论】:

  • 谢谢,这实际上非常有效!不知道将主键设置为两个单独的列。
  • 如果您删除一行,例如使用计数器 1,接下来插入的行将使用计数器 4,这样好吗?
猜你喜欢
  • 2011-12-29
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多