Как создать ссылочный номер тикета в PHP и mySQL

Я работаю над системой продажи билетов на PHP и MySQL.
У меня есть стол support с id как мой первичный ключ и AI.

я хочу добавить ticket_number, так что при подаче заявки каждому билету присваивается уникальный номер. Я не могу использовать MySQL для AI второго поля, верно?

Если я даю первый билет номер, а затем написать запрос для поиска последнего ticket_number в БД, тогда я думал сделать что-то вроде:

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

будет ли это работать или есть лучший способ?

0

Решение

По рекомендации MonkeyZeus, Вы должны сделать шаг назад и пересмотреть свою схему.

Вы хотите иметь несколько строк (ответов), которые связаны между собой одним идентификатором (номером заявки).

Вы определенно хотите, чтобы этот идентификатор был идентификатором строки в другой таблице.

Таким образом, у вас должно быть две таблицы:

  • один для tickets
  • другой для replies

Первый сможет хранить данные, относящиеся к заявке, включая состояние заявки (открыто, закрыто …), кому он назначен (идентификатор пользователя), кто создал заявку (опять же, идентификатор), и, возможно, когда он был открыт и закрыт (хотя это можно сделать с помощью других средств).

Второй будет содержать данные, относящиеся к каждой записи в вашем билете (исходное сообщение и последующие ответы, идущие туда-сюда).

Вы также можете иметь другие таблицы (или это может быть так же, как replies) для других типов действий (изменение статуса заявки, создание дополнительной заявки и т. д.).

tickets будет иметь уникальный идентификатор, который вы можете использовать как номер билета (возможно, с каким-то префиксом, возможно, каким-то образом переформатированным).

replies будет иметь уникальный идентификатор (который будет полезен, когда вы хотите прикрепить файлы к ответу или отредактировать его), а также идентификатор заявки, с которой он связан.

Пусть Mysql создает идентификаторы. Используйте API вашего любимого языка, чтобы получить идентификатор последней вставленной строки.

  • НЕ ДЕЛАЙТЕ инкрементные идентификаторы на стороне клиента на основе максимального идентификатора, возвращаемого сервером. Состояние гонки вырисовывается.
  • НЕ ДЕЛАЙТЕ использовать идентификаторы, сгенерированные на стороне клиента и не гарантирующие их уникальности
1

Другие решения

Для хорошего и уникального идентификатора у вас есть намного лучшие решения:

  • Вы можете использовать хэш md5, основанный на микротайме (так же, как uniqid из PHP, но более безопасным)
  • Вы можете использовать дополнительный столбец с unique = true функциональность и запрос, чтобы получить максимум этого столбца и приращение в вашем коде перед новой вставкой
  • Вы можете использовать свой идентификатор поддержки в качестве уникальной записи, это вполне выполнимо, вставив сначала другое поле, а затем верните идентификатор, вставленный для обновления идентификатора вашего тикета (если он является другим компонентом вашей таблицы) или покажите его одному пользователям, если вы считай это как твой билет
0

@jcaron Я разработал схему — это сработает?
предложенная схема для базы данных системы билетов

0

Я решил адаптировать ответ @Himanshu kumar следующим образом (так как это решает мой обычный вопрос), чтобы использовать идентификатор пользователя и метку времени (которые я уже использую) в качестве номера заявки:

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

Это создаст уникальную переменную, которая имеет идентификатор пользователя, дату и время. Я использовал секунды, чтобы сделать его более уникальным. Затем я буду использовать запрос, чтобы найти все сообщения / билеты с этим билетом.

0

Вы можете добиться с помощью кода ниже. Он будет генерировать уникальный номер билета каждый раз

$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;
-1
По вопросам рекламы [email protected]