如何在PHP和mySQL

时间:2016-08-23 12:42:04

标签: php mysql ticket-system

我正在使用PHP和mySQL的票务系统。 我有一个supportid作为我的主键和AI。

我想添加ticket_number,以便在提交故障单时为每个故障单分配一个唯一的号码。我无法将mySQL用于AI第二个领域,对吗?

如果我给第一张票一个号码,然后写一个查询来查找数据库中的最后一个ticket_number,那么我正在考虑做类似的事情:

$ticket = 1;
$next = $ticket+1;
echo "ticket number: #".$next;

这会有用还是有更好的方法?

5 个答案:

答案 0 :(得分:1)

根据MonkeyZeus的建议,您需要退后一步并重新考虑您的架构。

您希望有多个行(回复)通过单个ID(票号)链接在一起。

您肯定希望此ID成为另一个表中行的ID。

所以你应该有两张桌子:

  • 一个tickets
  • 另一个replies

第一个将能够保存特定于故障单的数据,包括故障单的状态(打开,关闭......),分配给谁(用户的ID),创建故障单的人(再次,一个id),也可能是当它被打开和关闭时(虽然这可以通过其他方式推断)。

第二个将保存特定于票证中每个条目的数据(初始消息,以及随后的回复)。

对于其他类型的操作(更改了故障单状态,创建了子故障单等),您可能还有其他表(或者可能与replies相同)。

tickets将有一个唯一的ID,你可以使用它作为票号(可能带有某种前缀,可能以某种方式重新格式化)。

replies将具有唯一ID(当您要将文件附加到回复或编辑时非常有用)以及与其关联的故障单的ID。

让Mysql创建ID。使用您最喜欢的语言API获取最后插入的行的ID。

  • 不要根据服务器返回的最大ID增加客户端ID。种族状况迫在眉睫。
  • 不要使用客户端生成的ID并且不保证是唯一的

答案 1 :(得分:0)

要获得一个好的和唯一的ID,您可以获得更好的解决方案:

  • 您可以使用基于microtime的md5哈希值(与PHP中的uniqid相同但更安全)
  • 您可以使用带有unique = true functionnality的额外列和请求获取此列的最大值并在新插入之前增加代码
  • 您可以使用支持ID作为唯一条目,首先插入其他字段,然后取回插入的ID以更新您的故障单ID(如果是表格的其他组成部分)或单独显示给您用户如果将其视为您的票证ID ..

答案 2 :(得分:0)

我决定调整@Himanshu kumar的答案如下(因为它解决了我的区域问题),以使用用户的ID和时间戳(我已经使用了两个)门票号码:

$user_id = 7; //example from session variable
$cur_date = date('dmyHis'); //timestamp ticket submitted
$ticket = '#'.$user_id.'-'. $cur_date;

这将创建一个具有用户ID和日期和时间的唯一变量。我用了几秒钟让它变得更加独特。然后,我将使用查询来查找此票证的所有消息/票证。

答案 3 :(得分:0)

@jcaron我设计了一个架构 - 这会有用吗? proposed schema for ticket system database

答案 4 :(得分:-1)

您可以通过以下代码实现。它每次都会生成唯一的票号

$brand = '#ref';
$cur_date = date('d').date('m').date('y');
$invoice = $brand.$cur_date;
$customer_id = rand(00000 , 99999);
$uRefNo = $invoice.'-'.$customer_id;
echo $uRefNo;