首先,如果以前曾经问过这件事,我很抱歉 – 事实上我确定它有,但我找不到它/找不到要搜索的东西.

我需要根据公司名称生成唯一的快速参考ID.例如:

Company Name                Reference
Smiths Joinery              smit0001
Smith and Jones Consulting  smit0002
Smithsons Carpets           smit0003

这些都将存储在MysqL表的varchar列中.数据将被收集,转义和插入,如’HTML – > PHP – > MysqL的”. ID应该是上面描述的格式,四个字母,然后是四个数字(最初至少 – 当我达到smit9999时它将溢出到5个数字).

我可以处理从公司名称生成4个字母,我将直接通过名称,直到我收集了4个字母字符,然后strtolower()它 – 但我需要获得下一个可用的数字.

什么是最好/最简单的方法,以便消除重复的可能性?

目前我在想:

$fourLetters = 'smit';
$query = "SELECT `company_ref`
            FROM `companies`
          WHERE
            `company_ref` LIKE '$fourLetters%'
          ORDER BY `company_ref` DESC
          LIMIT 1";
$last = MysqLi_fetch_assoc(MysqLi_query($link,$query));
$newNum = ((int) ltrim(substr($last['company_ref'],4),'0')) + 1;
$newRef = $fourLetters.str_pad($newNum,4,'0',STR_PAD_LEFT);

但是,如果两个用户尝试输入同时导致相同ID的公司名称,我可以看到这会导致问题.我将在列上使用唯一索引,因此它不会导致数据库中的重复,但它仍然会导致问题.

当我进行插入时,有没有人能想到让MysqL为我工作的方法,而不是事先在PHP中计算它?

请注意,实际代码将是OO并将处理错误等 – 我只是想知道是否有更好的方法来执行此特定任务,它更多的是关于sql而不是其他任何东西.

编辑

我认为@ emmanuelN建议使用MysqL触发器可能是解决这个问题的方法,但是:

>我不熟悉MysqL,特别是触发器,以使其工作,并希望创建,添加和使用触发器的分步示例.
>我仍然不确定这是否会消除生成两个相同ID的可能性.看看如果同时插入两行导致触发器同时运行会发生什么,并产生相同的引用?有没有办法以这样的方式锁定触发器(或UDF),它只能有一个并发实例?

或者我会接受任何其他建议的解决此问题的方法.

如果您使用的是MyISAM,则可以在文本字段自动增量字段上创建复合主键. MysqL将自动处理递增数字.它们是单独的字段,但您可以获得相同的效果.
CREATE TABLE example (
company_name varchar(100),key_prefix char(4) not null,key_increment int unsigned auto_increment,primary key co_key (key_prefix,key_increment)
) ENGINE=MYISAM;

当您插入表中时,key_increment字段将基于key_prefix的最高值递增.所以插入key_prefix“smit”将以key_inrement中的1开头,key_prefix“jone”将以key_inrement中的1开头,等等.

优点:

>您无需为计算数字做任何事情.

缺点:

>您的密钥分为2列.>它不适用于InnoDB.

php – 如何根据MySQL的现有值获取下一个字母数字ID的更多相关文章

  1. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  2. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  3. swift学习2 元组 tuples

    swift中出现了一种新的数据结构,非常牛掰的元组tuples如果懂PHP的猿,会发现这个元组和PHP的数组非常类似,同样是可以默认不指定key,也可以指定key目前的学习疑问是,如何进行元组的遍历?

  4. 尝试使用swift mailer,gmail smtp,php发送邮件

    这里是我的代码:在运行时出现此错误…

  5. android – 使用房间数据库(房间持久性库)创建触发器

    如何使用RoomPersistence库“创建触发器”解决方法在RoomDatabase上调用getopenHelper().这为您提供了一个SupportsqliteOpenHelper,它具有让人联想到sqliteOpenHelper的API.在那里,调用getWritableDatabase()以获取SupportsqliteDatabase,并在那里使用execsql()来执行您的sql语

  6. Android – 将SQLite与MySQL同步的最佳方式

    参见英文答案>Synchronizingclient-serverdatabases5个我正在开发一个包含网络应用和移动应用程序的项目,该应用程序记录每日用户的数据.用户可以删除,更新他们的数据,他们可以使用许多设备插入数据.我打算这样开发:用户输入他们的数据然后插入sqlite.服务将定期启动(每5小时或每小时)以使用时间戳与MysqL同步.我确实在互联网上使用服务和时间戳搜索了一个样本,但我一

  7. android – 使用SQLite触发器来更新“LastModified”字段

    即,触发器可以自动检测哪些表和行正被更新/插入/替换等.并通知设置该行的“last_modified”字段,或者我必须为每个表创建一个单独的触发器?或者如果触发器是一个坏主意,有没有更好的选择?谢谢.解决方法一个简短而甜美的答案给你:>之后,所以触发器有一个有效的表来引用.>您需要为您想要影响的每个表/列组合执行CREATETRIGGER.数据库不会假设,因为另一个表有一个last_modified列,你希望这个行为相同…

  8. android – 如何将唯一的GCM注册标识存储到MySQL中

    我正在设置GoogleCloudMessaging机制的服务器端,使用MySQL存储移动应用提供的注册ID.Google可以发出最多4k个注册码,我被迫将其存储在TEXT字段中.所有的好,到目前为止,问题是我必须处理这样的情况:>用户登录到应用程序>该应用从google请求注册ID>应用程序将新的注册ID发送到应用服务器>服务器存储该注册ID并将其链接到当前登录的用户>该用户注销并且新用户登录>应

  9. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  10. jQuery的Cookie封装,与PHP交互的简单实现

    下面小编就为大家带来一篇jQuery的Cookie封装,与PHP交互的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部